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

Individuelle Laufstrecke ausgeben

Inselknolle

Geocacher
Hallo und ja.... ich schon wieder :shocked:

Nachdem ich die letzten beiden Probleme geschafft habe, wurde ich gefragt, ob es eine Möglichkeit gibt, die gelaufene Strecke des Spielers mitzutracken und diese ausgeben zu lassen.

Zwar habe ich einiges gefunden aber so richtig schlau werde ich daraus nicht. Ich will ja nicht den Abstand zwischen 2 Zonen (den kenne ich ja) sondern ich versuche dem Spieler eine Möglickeit zu bieten am Ende des Spiels zu sehen welche Strecke er gelaufen ist. Hat er etwas vergessen und muss zurück laufen hat er halt mehr Meter auf der Uhr.

Sollte jemand eine Idee haben, währe ich sehr dankbar.
 

Charlenni

Geomaster
Mit einem Timer. Alle 10 Sekunden die Position des Spielers abfragen, Didtanz zur letzten gemerkten Position berechnen, diese zur Summe hinzurechnen und Position als letzt merken.
 
OP
Inselknolle

Inselknolle

Geocacher
So. Danke erstmal für deine Antwort. Habe jetzt viel probiert. Leider ohne Erfolg. Kannst du mir n Tip geben wie man das unter URWIGO realisieren kann?
 

Charlenni

Geomaster
Du brauchst einen Timer mit der gewünschten Dauer für den Abstand. 5-10 Sekunden sollten reichen. Dann eine Variable, die die letzten Koordinaten speichert (varLastPos). Weiterhin eine Variable, die die gelaufene Strecke enthält (varStrecke). Wenn du die Strecke messen möchtest, dann varStrecke auf 0 setzen, varLastPos auf Player.Position setzen und Timer starten. Im Timer Event musst du nun die Strecke seit dem letzten Ereignis berechnen. Dazu gibt es eine Funktion, die das für dich macht. Letzter Punkt ist varLastPos, aktueller ist Player.Position. Musst du online suchen (siehe http://www.das-wherigo-handbuch.de/index.php?title=Wherigo_-_spezifischer_LUA-Befehlskatalog#Wherigo.ZonePoint, Funktion VectorToPoint). Diese Strecke addierst du zu varStrecke und setzt dann varLastPos auf Player.Position. Wenn es ein Ablauf-Timer war, dann neu starten.

Das ist es. Wenn du ein Beispiel brauchst, dann kann ich das erst in einer Woche machen.
 
OP
Inselknolle

Inselknolle

Geocacher
Vielen Dank. Ganz schlau werde ich noch nicht draus aber ich gucke mal ob ich was basteln kann. über ein beispiel währe ich trotzdem dankbar wenn es deine zeit zulässt.

schöne Grüße
 

Charlenni

Geomaster
Ok, habe jetzt mal eine Demo-Cartridge gemacht.

Du brauchst die 4 Funktionen InitMeasuring, StartMeasuring, StopMeasuring und UpdateMeasuring. Diese machen die Hauptarbeit. Zusätzlich brauchst du noch einen Timer (hier MeasuringTimer), der den Ablauf steuert.

InitMeasuring wird beim Start der Cartridge aufgerufen und fügt die 2 verwendeten Variablen zur Cartridge hinzu, damit diese auch beim Abspeichern berücksichtigt werden.
StartMeasuring wird beimStart des Timers aufgerufen. Damit werden alle Variablen auf Null gesetzt.
StopMeasuring wird beim Beenden aufgerufen. Es aktuallisiert die bisher zurück gelegte Strecke.
UpdateMeasuring wird bei jedem Timerevent aufgerufen und berechnet die bisher zurückgelegte Strecke.

Um das Ganze in der Demo-Cartridge zu steuern habe ich einen Gegenstand (Walking) angelegt. Dieser hat zwei Kommandos: Start und Stop :). Bei Start wird StartMeasuring aufgerufen, welches alle Werte auf 0 setzt, und der Timer gestartet. Ab jetzt wird alle zwei Sekunden (kann auch geändert werden) die Position des Spielers bestimmt und die bisher zurückgelegte Distanz berechnet. Bei Stop wird die Messung angehalten und die berechnete Distanz ein letztes mal aktuallisiert. Zusätzlich wird die Beschreibung des Gegenstandes so angepasst, dass du die zurückgelegte Strecke siehst.

So, mehr gibt es eigentlich nicht zu sagen. Bei Fragen einfach melden.
 

Anhänge

  • WalkedDistance.zip
    2,3 KB · Aufrufe: 92
OP
Inselknolle

Inselknolle

Geocacher
Geil! :gott:

So kann ich was damit anfangen bzw verstehe das mal richtig. Ich probiere mal etwas rum. Vielen Dank auf alle Fälle für die Hilfe.
 
Oben