WiG-Trick #1: Abstandsbestimmung selbst gemacht; Teil 1: Grundlagen

In diesem Tutorial wollen wir uns damit beschäftigen, wie wir Abstände, z.B. zwischen der Spielerposition und einer Zone bestimmen können.

Schwierigkeitsgrad: Fortgeschritten
Voraussetzungen: Umgang mit Urwigo, Wherigo-Grundlagen, Programmierkenntnisse

Die manuelle, d.h. selbst programmierte Bestimmung eines Abstands, z.B. zwischen der Spielerposition und einer Zone / eines Punktes mag zwar auf den ersten Blick relativ sinnfrei erscheinen, zumal es ja für Zonen die OnEnter, OnExit, OnDistant und OnProximity Events gibt, mit denen man vieles bewerkstelligen kann, doch wie wir in späteren Tutorials sehen werden, können wir damit interessante Dinge realisieren, die mit den Standardfunktionen, die uns Urwigo bereitstellt nicht möglich sind.

Grundlagen

Zuallererst müssen wir uns mit den Grundlagen vertraut machen: Eine Zone besitzt in Wherigo mehrere Attribute, dazu gehört z.B. das Aktivitäts-Attribut, welches angibt ob ein Zone gerade aktiv ist und auf Events ‚lauscht‘, das Sichtbarkeits-Attribut, der Name und noch ein paar weitere. Uns interessieren aber vorerst nur die zwei Attribute Points und OriginalPoint.

Points: Bei dem Attribut Points handelt es sich um ein Array, das mehrere sog. ZonePoints beinhaltet, also die Punkte, die eine Zone definieren.

ZonePoints in Urwigo
Die Zonenpunkte in Urwigo…
ZonePoints in Lua
… und im Quelltext

OriginalPoint: Der OriginalPoint besteht nur aus einem einzigen Punkt. Standardmäßig liegt dieser Punkt in der Mitte der Zone und wird von Urwigo automatisch angelegt. Benutzt wird er hauptsächlich zum Navigieren. Wir werden ihn später benutzen, um den Abstand zwischen unserer Position und einer Zone zu berechnen.

ZonePoint: Wie bereits oben erwähnt handelt es sich bei einem ZonePoint um einen Punkt, also eine Koordinate. Eine ZonePoint selbst besteht aus 3 Attributen: longitude, latitude und altitude. Bei altitude handelt es sich um die Höhe der Koordinate über Normalnull, diese ist standardmäßig auf 0 gesetzt. Wichtig zu erwähnen ist, dass bei altitude kein numerischer Wert zurückgegeben wird, sondern ein Distance-Objekt, dazu weiter unten mehr.

 

Nun wissen wir, wie eine Zone aufgebaut ist, doch wie sieht es mit dem Spieler aus? Wie kommen wir an seine Koordinaten?

Für den Spieler gibt es die globale Variable Player, welche wiederum das Attribut ObjectLocation besitzt, das aus einem ZonePoint besteht, d.h. um die aktuelle Spielerposition abzufragen, müssen wir folgende zwei Variablen auslesen: Player.ObjectLocation.latitude und Player.ObjectLocation.longitude. Diese beiden Variablen werden ständig aktualisiert, eine manuelle Änderung ist zwar theoretisch möglich, würde aber beim nächsten GPS-Update überschrieben werden. Mit Player.ObjectLocation.altitude kann selbstverständlich die Höhe des Spielers abgefragt werden (vorausgesetzt, das Gerät unterstützt dies).

Wie oben bereits angemerkt, handelt es sich bei altitude aber nicht um einen numerischen Wert, sondern um ein Distance-Objekt, um dieses in einen numerischen Wert zu verwandeln verwenden wir folgenden Code:

Player.ObjectLocation.altitude:GetValue 'm'

Damit erhalten wir die Höhe des Spielers in Metern.

 

Damit sind wir auch schon durch mit den Grundlagen. Zum besseren Verständnis und zum Experimentieren habe ich ein Urwigo-Projekt vorbereitet, mit dem man die Spielerposition, sowie die Position einer Zone ausgeben lassen kann: Datei hier herunterladen.

 

Teil 2: „Es wird spärisch“

 

Links zum Thema:

No comments have been made. Use this form to start the conversation :)

Leave a Reply

Facebook
Facebook