Voraussetzung: "Einstieg in Lua“
In diesem Tutorial wollen wir uns mit der PlayAnywhere (kurz PA) Variante der WIGs befassen. PlayAnywhere heißt hier, dass der Spieler festlegt, wo er das Cartridge spielen möchte.
Da wir die Zonen folglich nicht vorher bestimmen können, muss dies der Spieler tun.
Das Zauberwort lautet
Wir stecken uns folgendes Ziel: Der Spieler soll zwei Punkte festlegen, anhand deren wir dann ein Quadrat berechnen. Die Seitelänge des Quadrates ist der Abstand der beiden Koordinaten und die Verbindung zwischen Ihnen eine Seite des Vierecks. Wir geben eine MessageBox aus mit der Bitte zur ersten Position zu gehen. Sobald der OK-Button der MessageBox gedrückt wird, halten wir die aktuelle Spielerposition in der Variable
So weit zu gut, eine Ecke des Quadrates ist bestimmt. Um die zweite Ecke zu bestimmen fügen wir, ebenfalls im "On clicked" Bereich der MessageBox eine zweite Nachricht ein und wiederholen so die Prozedur der Aufforderung und Messung. Nachdem die zweite Position in
Um es genau zu wissen, geben wir Abstand und Winkel in einer print Nachricht aus, die nur im Urwigo-Simulator, nicht auf dem WherigoPlayer (Oregon, WhereYouGo...) angezeigt wird. Da das Distance-Objekt
Vorsicht:
Nun aber genug getestet, wir benötigen die dritte Ecke (oben rechts, siehe Abb. 4) unseres Quadrates. Was wir über diese Ecke wissen, ist, dass ihr Abstand zu Position 2 der gleiche ist, wie der zwischen 1 und 2. Beim Quadrat sind ja allen Seiten gleich lang. Für
Zuletzt setzen wir mit
!!! Damit ihr eure Zone mit
Das Handling mit Quadraten als Zone ist aber nicht zwingend erforderlich um einen PA zu erzeugen. Wenn die Zone ein Viereck sein soll, kann man auch die ersten 3 Ecken bestimmen lassen. Somit hat der Spieler auch eher eine Vorstellung wo sich das Spielfeld befindet und kann auch auf nicht rechtwinkligen Spielfeldern (wer weiß noch was ein Parallelogramm ist ?) die Zone definieren.
Ebenso denkbar ist, dass bei einem Spielfeld wie Cachopoly
alle 4 Ecken gemessen werden. Hier werden die 4 Eckfelder (Homezone, Hochsitz, Parkplatz und Jäger) als Kreiszonen
bestimmt und die Zwischenstationen (Muggelhausen, Filmdosenverleih, Stammtisch, Enigma...) berechnet, indem man den
Winkel Homezone -> Hochsitz nimmt und von der Homezone aus 1/5, 2/5, 3/5 bzw. 4/5 der Entfernung für die Peilung mit
In diesem Tutorial wollen wir uns mit der PlayAnywhere (kurz PA) Variante der WIGs befassen. PlayAnywhere heißt hier, dass der Spieler festlegt, wo er das Cartridge spielen möchte.
Da wir die Zonen folglich nicht vorher bestimmen können, muss dies der Spieler tun.
Das Zauberwort lautet
Player.ObjectLocation
. Diese Funktion liefert uns ein ZonePoint Objekt, dass die Koors des aktuellen
Spielstandortes Preis gibt.
Wir stecken uns folgendes Ziel: Der Spieler soll zwei Punkte festlegen, anhand deren wir dann ein Quadrat berechnen. Die Seitelänge des Quadrates ist der Abstand der beiden Koordinaten und die Verbindung zwischen Ihnen eine Seite des Vierecks. Wir geben eine MessageBox aus mit der Bitte zur ersten Position zu gehen. Sobald der OK-Button der MessageBox gedrückt wird, halten wir die aktuelle Spielerposition in der Variable
position1
fest
So weit zu gut, eine Ecke des Quadrates ist bestimmt. Um die zweite Ecke zu bestimmen fügen wir, ebenfalls im "On clicked" Bereich der MessageBox eine zweite Nachricht ein und wiederholen so die Prozedur der Aufforderung und Messung. Nachdem die zweite Position in
position2
gespeichert wurde beginnt die eigentliche Arbeit. Die
vorgefertigte Funktion VectorToPoint
, enthalten in der eingebundenen Wherigo-Bibliothek erwartet als
Parameter zwei ZonePoint Objekte und berechnet Abstand und Winkel der beiden Positionen.
Der Winkel wird in einem 360° Kreis gemessen (Osten 90°, Süden 180°, Westen 270° usw) und sollte uns von
Peilungsaufgaben bekannt vorkommen. In Abb. 1 würde der Winkel bei etwa 340° liegen sollte.
Um es genau zu wissen, geben wir Abstand und Winkel in einer print Nachricht aus, die nur im Urwigo-Simulator, nicht auf dem WherigoPlayer (Oregon, WhereYouGo...) angezeigt wird. Da das Distance-Objekt
d
nicht
automatisch in Meter angegeben wird, bestimmen wir den Wert mit d:GetValue"m"
.
Vorsicht:
d:GetValue("m")
ist zwar syntaktisch auch korrekt, funktioniert aber nicht auf allen WIG-Playern.
Bei unserem Beispiel sieht die Ausgabe folgendermaßen aus:
Winkel 338.97394387323 Grad Entfernung 49.227289103145 mAls kleine Zwischenaufgabe wollen wir einen Wegpunkt bestimmen, der 5 Meter Richtung Osten von Position 1 entfernt ist. Dazu erzeugen wir mit
Wherigo.Distance(5,'m')
ein entsprechendes Distance-Object und mit Wherigo.TranslatePoint
einen neuen ZonePoint, ausgehend von Position 1, 5 Meter in Richtung 90 ° gehend. Die Vektorrechnung aus der
Schulzeit lässt grüßen.
Nun aber genug getestet, wir benötigen die dritte Ecke (oben rechts, siehe Abb. 4) unseres Quadrates. Was wir über diese Ecke wissen, ist, dass ihr Abstand zu Position 2 der gleiche ist, wie der zwischen 1 und 2. Beim Quadrat sind ja allen Seiten gleich lang. Für
Wherigo.TranslatePoint
haben wir also schon den Ausgangspunkt position2
und den Abstand d
. Wie aber kommen wir zum Winkel b2
?
Diese Frage lässt sich recht schnell beantworten, wenn wir bedenken, dass die Innenwinkel eines Quadrates 90° sind.
Winkel b2
ist also Winkel b
zuzüglich 90°. Für den Fall, dass der Winkel größer als 360
wird, nehmen wir mittels Modulo den Wert zwischen 0 und 360. Mit dem so errechneten Winkel können wir Position 3 und
von dort ausgehend wieder 90° weiter Position 4 errechnen.
An der Zeile b3 = b2 + 90
sehen wir, dass wir die Modulo-Operation auch weglassen können, da die in lua
genutzen Sinusfunktionen auch Winkel größer 360° vertragen.
Zuletzt setzen wir mit
myZone.Points
die vier bestimmten bzw. errechneten Position für unsere Zone
myZone
. Damit die Zonendarstellung im Wherigo-Player aktualisiert wird sollten wir die Sichtbarkeit der
Zone mit myZone.Visible
zuerst auf false und anschließend wieder auf true setzen.
!!! Damit ihr eure Zone mit
myZone
ansprechen könnt, müsst ihr bei der Definition der Zone in Urwigo nicht nur den Namen sondern auch den Identifier auf myZone
setzen.
Wir haben somit die Koordinaten der Zone auf den Standort gesetzt in dem der Spieler das Cartridge spielen
möchte.Das Handling mit Quadraten als Zone ist aber nicht zwingend erforderlich um einen PA zu erzeugen. Wenn die Zone ein Viereck sein soll, kann man auch die ersten 3 Ecken bestimmen lassen. Somit hat der Spieler auch eher eine Vorstellung wo sich das Spielfeld befindet und kann auch auf nicht rechtwinkligen Spielfeldern (wer weiß noch was ein Parallelogramm ist ?) die Zone definieren.
Wherigo.TranslatePoint
heranzieht.
Grundgedanke ist aber immer, dass der Spieler genügend ZonePoints setzen muss, um das Spielfeld eindeutig
aufzuziehen. Wer sich Spielfrust ersparen möchte, sollte im Cachelisting genau beschreiben was der Spieler gerade
ausmisst. ("Setze mit Punkt A und B eine Gerade. Das Spielquadrat befindet sich anschließend rechts von dieser")
Keine Kommentare:
Kommentar veröffentlichen