• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Personen im Spiel umherwandern lassen

PapaGei139

Geocacher
Hallo zusammen,

ich habe mal das "Parkabenteuer" http://coord.info/GC2PN9A gespielt.
Und in diesem gab es einen Hundebesitzer der durch die Zonen wanderte.
Das hätte ich auch gern bei meinem umgesetzt. Ich klicke übrigens mit Urwigo rum.

Im Wiki gibts ja schon ein Beispiel mit einem Agenten.
http://www.das-wherigo-handbuch.de/...LUA&section=12#Verfolgung_durch_einen_Agenten

Doch in dem Parkabenteuer bewegt er sich ja trotz Stillstand, d.h. die Person hat nicht immer den gleichen Abstand zum Spieler.
Man kann quasi in einer Zone bleiben, bis er an einem vorbeikommt um ihn anzusprechen.

Bisher hab ich das mit nem Zufallsmodus gelöst, so wird die Person beim Eintreten in die Zone halt in die Zone bewegt oder auch nicht. Man weiß das vorher halt nicht.
 

Charlenni

Geomaster
Was war jetzt gleich noch die Frage? ;)

Jedes ZItem und jeder ZCharacter hat eine ObjectLocation, die ihren Ort an gibt. Diesen kannst Du dann via Timer immer neu setzen.
 

Sabeta

Geocacher
Schwierig, wenn es fortlaufend sein soll, dann geht dies nur per Timer und diese Dinger sind so eine Sache. So hatte ich bei mir per Timer die Distance ermittelt, die Folge war ein merklicher Einbruch der Performence. Das Ding flog also wieder raus.

Wie könnte man das machen:
per Zufall Strecke und Winkel definieren (bzw. den Winkel zum Spieler nehmen, per Wherigo.VectorToPoint z.B.) und per Wherigo.TranslatePoint ausführen lassen, den aktuellen Abstand zum Spieler dann per Wherigo.VectorToPoint errechnen und anzeigen bzw. wenn eine Entfernung unterschritten wird den Spieler z.B. vom Hund beißen lassen.

Das ganze lässt sich ohne Zone durchführen, es reicht ein ZonePoint für den Hund.

Für Wherigo.VectorToPoint gibt es auch Ersatz, weil es wohl auf dem iPhone eine falschen Winkelausgabe gibt.

Soweit meine Idee dazu.

Sabeta
 

TeamBunteBlitze

Geocacher
Hallo Sabeta,

ohne Timer? In welcher Ereignisbehandlungsroutine nimmst du dann zyklisch die Verschiebung der Position der Person vor? Ziel ist es doch wohl, das eine Person für den Spieler sichtbar 'umher läuft'. Machst du es ohne Timer dann bewegt sich die Person nicht gleichmäßig.

Wichtig ist beim Timer, den Berechnungszyklus nicht zu kurz einzustellen.

VG

Sven
 

Sabeta

Geocacher
@TeamBunteBlitze

natürlich mit Timer, ich schrieb nur, dass sie kritisch sind, daher mit Umsicht einsetzen und die Intervalle eher nicht zu kurz wählen. Ist immer eine Frage was sonst noch alles passiert, ob der Spieler nur Informationen angezeigt bekommt oder nebenher Eingaben machen muß.

Sabeta
 
OP
PapaGei139

PapaGei139

Geocacher
Vielen Dank für die Antworten.
Hm, ich denke dann belasse ich es besser bei meiner bisherigen Lösung.
Beim Eintreten des Spielers in eine Zone per Zufall die Person in diese zu bewegen.
Der Spieler muss dann halt nur das raus-rein-in die Zone-Spiel betreiben, um die Person irgendwann zu sehen.
Glücklich bin ich mit dieser Lösung allerdings nicht.
 

WhitePawn

Geocacher
Ich würde folgenden Ansatz ausprobieren:

- eine Reihenfolge der Zonen festlegen in der sie besucht werden sollen
- diese Reihenfolge definieren, z. B. als Array
- über einen Timer die Wanderung steuern, alle x Minuten/Sekunden
- jedes Mal, wenn der Timer zuschlägt erhöht man den Zähler und liest die nächste Zone aus dem Array
- ist man am Ende des Arrays angekommen, setzt man den Zähler auf Null, so daß man beim nächsten Mal wieder am Beginn des Arrays anfängt

Damit hättest Du eine Wanderung durch alle Zonen, so daß auch mal jemand vorbei kommt, wenn man in der entsprechenden Zone ist.
 

WhitePawn

Geocacher
Hätte ich erwähnen sollen, daß es ohne lua kaum gehen wird? ;)

Ein Array ist ein Stapel ein und des selben Feldes das über einen Zähler angesprochen wird.

Definiert wird es wie folgt:

zonen = {2, 1, 3, 5, 4,... usw}

Über einen Index kann man dann auf die einzelnen Felder zugreifen.
zonen[1] wäre hier dann 2
zonen[4] wäre 5 usw.

Da man auch über einen Zähler zugreifen kann (zonenen[counter]) würde es sich anbieten, um eine Reihenfolge bereit zu stellen.
 

Charlenni

Geomaster
Da muss ich kurz korrigierend dazwischen: Eine Array muss unter Lua nicht in allen Teilen den gleichen Typ haben. Auch
Code:
zonen = {1, "Test", zitemItem, 4}
ist eine gültiges Array.

In diesem Fall wäre es wahrscheinlich besser, in diese Tabelle die Zonen zu legen, also in der Art von
Code:
zonen = {zone1, zon2, zone3, zone4}
. Dann machst Du Dir noch eine Variable (z.B.
Code:
counter = 1
, mit der Du auf die Zonen zugreifen möchtest. Diese wird immer weiter hochgezählt bis zum maximalen Wert und dann wieder auf 1 gesetzt. Mit dieser setzt Du nun den Gegenstand oder Charakter um. Einfach
Code:
zcharacterCharacter:MoveTo(zonen[counter])
. Und schon steht er in der Zone, wo Du Ihn als nächstes haben möchtest. Dann noch kurz Counter hochgesetzt (
Code:
counter = counter + 1
) und auf Überlauf prüfen (
Code:
if counter > 4 then counter = 1 end
und schon bist Du fertig.
 

WhitePawn

Geocacher
Charlenni schrieb:
Da muss ich kurz korrigierend dazwischen: Eine Array muss unter Lua nicht in allen Teilen den gleichen Typ haben. Auch
Code:
zonen = {1, "Test", zitemItem, 4}
ist eine gültiges Array.

Ich wollte ihn ja jetzt nicht verwirren. Und ich behaupte mal die wenigsten packen unterschiedliche Typen da rein. ;)
 
Oben