Nachdem die Wiimote angeschlossen ist und eine funktionierende Sensorbar existiert, müssen wir uns nun um die passende Umsetzung der Wiimote-Informationen in eine funktionierende Steuerung kümmern. Das ideale (weil programmierbare) Werkzeug ist das kostenlose Programm GlovePIE, welches wir uns zunächst herunterladen. Die Installation von GlovePIE gibt keine Rätsel auf, so dass man eigentlich sofort loslegen kann. Wichtig ist dabei, dass dieses Programm mit ausführbaren Scripten arbeitet und als Programm selbst keine fertige Lösung, sondern nur Entwicklungsumgebung und Interpreter ist! Allerdings sollte man sich davon nicht abschrecken lassen, denn durch die Eingriffsmöglichkeiten kehrt sich dieser vermeintliche Nachteil schnell in einen Vorteil um.
Das Programm bietet bereits eine Vielzahl vorgefertigter Scripte, die sich über das Menü „File“ und den Menüpunkt „Open“ laden und modifizieren lassen. Mit „Run“ wird die Ausführung gestartet und mit „Stop“ beendet. Da oft genug die Maus genutzt wird und es bei Fehlern zu Blockierung der Mauseingaben kommen kann, sei an die Tastenkombination „Alt + R“ erinnert, mit der man in diesem Fall das Menü „Run“ öffnet. Danach einfach mit den Pfeiltasten auf den „Stop“-Eintrag und „Enter“ drücken. Wer fingerfertig ist, kann auch mit „Shift+P+I+E“ abbrechen. Und nie vergessen, fertige Scripte abzuspeichern, sonst fängt man beim nächsten Mal wieder von vorn an.
Wir werden im Folgenden verschiedene Anwendungsszenarien und Steuerungsvarianten testen und die jeweiligen Scripte als „Copy & Paste“-Text anfügen. So sollte auch ungeübten Anwendern eine eigene Programmierung problemlos gelingen. Wenn also in den nächsten Beispielen Scripte beschrieben werden, so beziehen sich diese stets auf GlovePIE 0.29.
Erwähnt sei auch, dass es mittlerweile für viele Spiele eigene und speziell angepasste Scripte gibt. Wer sich also bei der Programmierung nicht sicher ist oder einfach nur Anregungen sucht, der findet über jede Suchmaschine recht schnell eine Unmenge nützlicher Links. Außerdem gibt es unzählige Foren und Communities rund um die Wiimote. Unser Artikel beschäftigt sich daher nur mit den Grundlagen und Anwendungsmöglichkeiten, da die Vielfalt einfach den Rahmen des Lesbaren sprengen würde.
Die Wiimote verfügt wie schon erwähnt über mehrere Tasten. Diese Tasten lassen sich in der Script-Sprache von GlovePIE sehr schnell und einfach den gewünschten Tasten des Keyboards zuweisen. Die Script-Sprache funktioniert dabei objektorientiert, so dass der Syntax auch für Neueinsteiger leicht zu überschauen und logisch nachzuvollziehen ist. Die Wiimote ist dabei als Objekt mit Properties (Eigenschaften) zu betrachten:
Wiimote.Eigenschaft
Die Tasten der Wiimote werden deshalb folgerichtig so definiert:
Wiimote.Up Wiimote.Down
Wiimote.Left Wiimote.Right
Wiimote.One Wiimote.Two
Wiimote.A Wiimote.B
Wiimote.Home Wiimote.Plus
Wiimote.Minus
Diesen Properties (Eigenschaften) des Objektes können nun wahlweise Werte zugewiesen werden, bzw. die Werte für das jeweilige Property ausgelesen werden, soweit es Werte besitzt und dies sinnvoll ist. Die Tasten der Tastatur werden entweder einfach durch den betreffenden Buchstaben (also z.B. a) dargestellt.
w = Wiimote.Up
s = Wiimote.Down
a = Wiimote.Left
d = Wiimote.Right
Diese vier Befehlszeilen legen die Aktionen des Tastenkreuzes der Wiimote auf die üblichen Tasten (wsad) für die Bewegung innerhalb eines Spieles um. Wenn man jetzt diese Zeilen in das GlovePIE-Fenster kopiert und mit „Run“ ausführt, hat man bereits die erste eigene Wiimote-Steuerung programmiert, die in jedem Spiel, welches diese Kombination nutzt sofort verfügbar ist. Die Tastatur funktioniert natürlich trotzdem weiterhin wie gewohnt. Natürlich lassen sich die Tasten auch kombinieren und man kann selbstverständlich auch andere Tasten als nur Buchstaben verwenden. Hier ein Beispiel für das Legen des Tastenkreuzes der Wiimote auf die Richtungstasten (Pfeiltasten) der Tastatur und Beispiele für Tastenkombinationen:
Up = Wiimote.Up
Right = Wiimote.Right
Left = Wiimote.Left
Down = Wiimote.Down
Shift+a = Wiimote.One
Ctrl+b = Wiimote.Two
Tab+c = Wiimote.A
Home && Enter = Wiimote.Home
Nachdem wir wissen, wie wir die Tasten belegen können, testen wir das Erlernte anhand zweier Scripte. Allerdings ist darauf zu achten, dass beide Playerfenster jeweils sichtbar sind und im Vordergrund liegen. Zunächst erst einmal das Script für den Windows Mediplayer:
Mediaplayer-Script:
//Abspieltasten
CTRL && P = Wiimote.A //Play und Stop
//Navigation
Control && F = Wiimote.Right //Nächstes Lied
Control && B = Wiimote.Left //Voriges Lied
Home && Enter = Wiimote.Up //Anfang der Playlist
End && Enter = Wiimote.Down //Ende der Playlist
//Lautstärke
F8 = Wiimote.Minus
F9 = Wiimote.Plus
GlovePIE mit dem WMP-Script |
Der ferngesteuerte WMP |
Winamp-Script:
//Abspieltasten
x = Wiimote.A //Play
v = Wiimote.Home //Stop
Shift+v = Wiimote.B //Stop mit Ausblenden
//Navigation
b = Wiimote.Right //Nächstes Lied
z = Wiimote.Left //Voriges Lied
Ctrl+z = Wiimote.Up //Anfang der Playlist
Ctrl+b = Wiimote.Down //Ende der Playlist
Left = Wiimote.One //5 Sekunden zurück springen
Right = Wiimote.Two //5 Sekunden vor springen
//Lautstärke
Down = Wiimote.Minus
Up = Wiimote.Plus
Nach der Tastensteuerung kommt nun erstmals die selbstgebaute Sensorbar zum Einsatz. Zunächst emulieren wir die Maustasten nach dem bereits bekannten Schema:
Mouse.RightButton = Wiimote.A
Mouse.LeftButton = Wiimote.B
Mouse.MiddleButton = Wiiote.Home
Der nächste Schritt ist die Umsetzung der Bewegung in die zweidimensionale X-Y-Umgebung des Bildschirms. Auch dies ist im Prinzip recht simpel, erfordert aber zunächst erst einmal eine Kalibration, denn jede Wiimote reagiert ein klein wenig anders. Dazu kopieren wir folgendes kleines Script und führen es aus:
Kalibrierungsscript:
var.accx = wiimote.RawForceX
var.accy = wiimote.RawForceY
var.accz = wiimote.RawForceZ
debug = var.accx + “ “ + var.accy + “ “ + var.accz
In der Debugzeile können wir die Kalibrierungswerte ablesen
Diese Werte, in unserem Falle 7 / 20 / 6, tragen wir im nachfolgenden Mausscript als Vorgabewerte für den Versatz ein. Dieser Code ist bereits etwas umfangreicher und basiert in den Grundzügen auf dem Script von vkapadia.
Übersicht über die verfügbaren Optionen:
- Mausbewegung und drei klickbare Maustasten
- Scrollen mit dem Mausrad
- Richtungstasten steuern über das Tastenkreuz der Wiimote (D-Pad)
Die Steuerung ist etwas komplex, da die Position zunächst ausgelesen und berechnet werden muss, bevor sie als X/Y-Wert an die Maus übergeben werden kann. Interessant ist auch die umgesetzte Begrenzung des Bewegungsspielraums anhand der Bildschirmgröße.
Fertiges Mausscript:
//Zunächst tragen wir die Variablen aus unserem Kalibrierungsscript ein
var.xtrim = 7
var.ytrim = 20
var.ztrim = 6
//
//Das Tastenkreuz wird auf die Pfeiltasten umgesetzt
if wiimote.Up
Up = true
else
Up = false
endif
if wiimote.Down
Down = true
else
Down = false
endif
if wiimote.Left
Left = true
else
Left = false
endif
if wiimote.Right
Right = true
else
Right = false
endif
//Mouse Buttons
Mouse.RightButton = Wiimote.A
Mouse.LeftButton = Wiimote.B
Mouse.MiddleButton = Wiimote.Home
//Auslesen der ermittelten Positionsänderung der Wiimote
//und Korrektur mit den Kalibrierungswerten
var.accx = wiimote.RawForceX + var.xtrim
var.accy = wiimote.RawForceY + var.ytrim
var.accz = wiimote.RawForceZ + var.ztrim
if wiimote.dot1vis and wiimote.dot2vis then
if var.accy > -7 then
var.orientation = 0
elseif var.accy > -45 then
if var.accx < 0 then
var.orientation = 3
else
var.orientation = 1
endif
else
var.orientation = 2
endif
if var.leftpoint = 0 then
if var.orientation = 0 then
if wiimote.dot1x < wiimote.dot2x then
var.leftpoint = 1
else
var.leftpoint = 2
endif
endif
if var.orientation = 1 then
if wiimote.dot1y > wiimote.dot2y then
var.leftpoint = 1
else
var.leftpoint = 2
endif
endif
if var.orientation = 2 then
if wiimote.dot1x > wiimote.dot2x then
var.leftpoint = 1
else
var.leftpoint = 2
endif
endif
if var.orientation = 3 then
if wiimote.dot1y < wiimote.dot2y then
var.leftpoint = 1
else
var.leftpoint = 2
endif
endif
endif
if var.leftpoint = 1 then
var.fix1x = wiimote.dot1x
var.fix1y = wiimote.dot1y
var.fix2x = wiimote.dot2x
var.fix2y = wiimote.dot2y
else
var.fix1x = wiimote.dot2x
var.fix1y = wiimote.dot2y
var.fix2x = wiimote.dot1x
var.fix2y = wiimote.dot1y
endif
var.dx = var.fix2x – var.fix1x
var.dy = var.fix2y – var.fix1y
var.cx = (var.fix1x+var.fix2x)/1024.0 – 1
var.cy = (var.fix1y+var.fix2y)/1024.0 – .75
var.d = sqrt(var.dx*var.dx+var.dy*var.dy)
var.dx = var.dx / var.d
var.dy = var.dy / var.d
var.ox = -var.dy*var.cy-var.dx*var.cx;
var.oy = -var.dx*var.cy+var.dy*var.cx;
var.ax = (var.ox * screen.desktopwidth) + (screen.desktopwidth / 2)
var.ay = (-var.oy * screen.desktopwidth) + (screen.desktopheight / 2)
var.dx = var.ax – mouse.cursorposx
var.dy = var.ay – mouse.cursorposy
var.d = sqrt((var.dx*var.dx)+(var.dy*var.dy))
var.a = 180 / (200 + var.d * var.d * var.d * .001)
var.finalx = mouse.cursorposx * var.a + var.ax * (1 – var.a)
var.finaly = mouse.cursorposy * var.a + var.ay * (1 – var.a)
mouse.cursorposx = var.finalx
mouse.cursorposy = var.finaly
else
var.leftpoint = 0
endif
Kommentieren