Voraussetzung: "Globaler Code - Teil II “
Abbildung 1: Die Person Sheldon ist erstmal nicht sichtbar, befindet sich in der unsichtbaren Hilfszone und hat eine eigene Koordinate
Nach langer Zeit gibt es aufgrund aktueller Inspiration mal wieder ein neues Tutorial. Dieses Mal geht es um das Thema Personen-statt-Zone.
Die Idee / die Anforderung ist, dass Personen losgelöst von einer Zone im Spielfeld verteilt sind und erst sichtbar sein sollen, wenn man nahe genug (hier 20 Meter Abstand) ist, um mit ihnen zu interagieren.
Gerade wenn viele Personen im Spiel sind und deswegen eine eigene Zone für die Person aus Performance Gründen ausscheidet, sollte dieser Ansatz als Alternativ zum bishierigen Umgang mit Personen / Gegenständen sein. (Ob Gegenstand oder Person ist egal, die Idee bleibt die gleiche).
Wir definieren zunächst eine Person namens "Sheldon". Diese ist stellvertretend für x weitere Personen die wir im Spiel später brauchen.
Wichtig ist, dass Sheldon zunächst unsichtbar ist, d.h. das
Ganz ohne Zonen geht es leider nicht, denn eine Interaktion mit Personen ist nur möglich, wenn Spieler und Person sich entweder in der gleichen Zone befinden oder die Person dem Spieler zugeordnet wird. (Aber dann wären ja alle 30 Personen des Spieles immer sichtbar)
Wir lösen das Ganze über den Kniff einer unsichtbaren Zone, die nur aus einem Punkt besteht (Koordinaten beliebig), die zwar aktiv aber unsichtbar ist.
Diese Zone kann irgendwo liegen und sollte weit außerhalb des Spielfeldes gewählt werden.
Wichtig ist der Punkt, dass die Objekte der Zone immer sichtbar sind, deswegen
Sollte die Spielidee verlangen, dass man in einer Zone stehen und nahe genug an den Personen sein muss, lässt sich auch eine normale Zone nehmen und
Wenn nur die Entfernung zur Person entscheident ist, empfiehlt sich die unsichtbare Zone. Wer diesen Blog schon etwas weiter studiert hat, kennt noch die Stelle an der allen Zonen ermittelt wurden. Ich habe diesen Code leicht abgeändert zu
Wictig ist der Bezeichner / Identifier des Wherigos. Bei mir nenn ich ihn immer
Jetzt kommt der spannende Teil, nämlich wie werden Personen sichtbar gemacht wenn sie nahe genug sind, bzw. wie verschwinden sie wenn ich weiter laufe?
Dazu starten wir einen vorher definierten Timer (mit dem Identifier
Der Winkel interessiert uns nicht, die Entfernung geben wir uns in Metern zurück.
Der Timer ist bei mir auf ein Interval von 3 Sekunden gestellt. Wenn viele Personen im Spiel sind und die Abstände groß genug sind (30 oder 40 Meter), sollte man darüber nachdenken, ihn nur alle 5 oder 10 Sekunden anspringen zu lassen um die Performance des Oregons nicht zu stressen.
Da wir das Start-Event des Wherigos sowie die OnTick-Methode des Timers überschreiben, muss der Code in
Im Spiel sieht es dann so aus, dass zu Beginn niemand zu sehen ist....
... kommen wir dann zur Kreugung an der Sheldon wartet, so wird er sichtbar und wir können mit ihm interagieren
Abbildung 1: Die Person Sheldon ist erstmal nicht sichtbar, befindet sich in der unsichtbaren Hilfszone und hat eine eigene Koordinate
Die Idee / die Anforderung ist, dass Personen losgelöst von einer Zone im Spielfeld verteilt sind und erst sichtbar sein sollen, wenn man nahe genug (hier 20 Meter Abstand) ist, um mit ihnen zu interagieren.
Gerade wenn viele Personen im Spiel sind und deswegen eine eigene Zone für die Person aus Performance Gründen ausscheidet, sollte dieser Ansatz als Alternativ zum bishierigen Umgang mit Personen / Gegenständen sein. (Ob Gegenstand oder Person ist egal, die Idee bleibt die gleiche).
Wir definieren zunächst eine Person namens "Sheldon". Diese ist stellvertretend für x weitere Personen die wir im Spiel später brauchen.
Wichtig ist, dass Sheldon zunächst unsichtbar ist, d.h. das
Display-Flag
ist deaktiviert. Zudem bekommt Sheldon eine eigene Koordinate, nämlich der Standpunkt an dem er im Spiel auf den Spieler wartet.
Ganz ohne Zonen geht es leider nicht, denn eine Interaktion mit Personen ist nur möglich, wenn Spieler und Person sich entweder in der gleichen Zone befinden oder die Person dem Spieler zugeordnet wird. (Aber dann wären ja alle 30 Personen des Spieles immer sichtbar)
Wir lösen das Ganze über den Kniff einer unsichtbaren Zone, die nur aus einem Punkt besteht (Koordinaten beliebig), die zwar aktiv aber unsichtbar ist.
Diese Zone kann irgendwo liegen und sollte weit außerhalb des Spielfeldes gewählt werden.
Wichtig ist der Punkt, dass die Objekte der Zone immer sichtbar sind, deswegen
Show objects = Always
. Wir "tricksen" also Spieler-und-Person-in-einer-Zone aus
Sollte die Spielidee verlangen, dass man in einer Zone stehen und nahe genug an den Personen sein muss, lässt sich auch eine normale Zone nehmen und
Show objects = On Enter
setzen.
So kann man umsetzen, dass man bei einer Mafia-Ralley in Köln im Stadteil Köln-Kalk sein und nahe genug an die Gangsterbosse kommen muss.
Wenn nur die Entfernung zur Person entscheident ist, empfiehlt sich die unsichtbare Zone. Wer diesen Blog schon etwas weiter studiert hat, kennt noch die Stelle an der allen Zonen ermittelt wurden. Ich habe diesen Code leicht abgeändert zu
getCharacters
in meine global.lua Datei gepackt, da ich ihn in mehreren WIGs immer wieder benötige.
Man kann den Code aber auch einfach lokal ins lua des WIGs packen.
Wictig ist der Bezeichner / Identifier des Wherigos. Bei mir nenn ich ihn immer
WIG
, ansonsten wird Zeile 176 zu nem Fehler führen. Wenn ihr euren Wherigo anders bezeichnet, müsst ihr das dort anpassen.
Jetzt kommt der spannende Teil, nämlich wie werden Personen sichtbar gemacht wenn sie nahe genug sind, bzw. wie verschwinden sie wenn ich weiter laufe?
Dazu starten wir einen vorher definierten Timer (mit dem Identifier
TPerson
) und führen bei jeder Iteration folgendes aus (Zeile 14-17):
- Iterieren über alle Character
- Messe die Entfernung zu der Person und mache sie sichtbar wenn sie sich näher als 20 Meter zum Spieler befindet
Der Winkel interessiert uns nicht, die Entfernung geben wir uns in Metern zurück.
Der Timer ist bei mir auf ein Interval von 3 Sekunden gestellt. Wenn viele Personen im Spiel sind und die Abstände groß genug sind (30 oder 40 Meter), sollte man darüber nachdenken, ihn nur alle 5 oder 10 Sekunden anspringen zu lassen um die Performance des Oregons nicht zu stressen.
Da wir das Start-Event des Wherigos sowie die OnTick-Methode des Timers überschreiben, muss der Code in
Lua user functions
und nicht in Lua user directives
eingebunden werden. Ansonsten kommt es zu einem Compile-Fehler (ja ich weiß, lua compiliert nicht) im Urwigo, da die OnStart / OnTick Methode doppelt vorhanden ist. Hängt mit dem Zeitpunkt zusammen, wann der lua code eingebunden wird.
Im Spiel sieht es dann so aus, dass zu Beginn niemand zu sehen ist....
... kommen wir dann zur Kreugung an der Sheldon wartet, so wird er sichtbar und wir können mit ihm interagieren