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

Abstand zu einer Moving-Zone wird nicht aktualisiert

Hallo an alle,

ich habe folgendes Problem:
Ich habe eine Zone, ermittel die Richtung zum Spieler und versetzte die Zone alle 5 Sekunden in Richtung des Spielers, so dass er quasi verfolgt wird. Auf der Karte im Simulator sieht man auch wie die Zone wandert. Wenn ich dann die Entfernung zwischen Zone und Spieler berechne und in einer MessageBox anzeigen lasse, sehe ich, wie der Abstand alle 5 Sekunden kleiner wird.

Schaut man aber unter "You See" auf die Zone, wird dort immer der Abstand zur Original-Position angezeigt, an der die Zone erzeugt wurde. Die Entfernung aktualisiert sich nicht.

Dies habe ich sowohl auf einem Oregon als auch im Simulator getestet.
Gibt es einen Befehl um die Anzeige zu aktualisieren? Hat jemand eine Idee, woran das liegen kann?

Vielen Dank und viele Grüße,
Michael
 

Charlenni

Geomaster
Versetzt Du auch OriginalLocation der Zone? Sollte eigentlich nichts ausmachen, aber man weiß nie ;)

Eventuell wäre ein Testcartridge sehr hilfreich. Dann kann man mal schauen, woran es liegt.
 
OP
S

silkeundmichael

Geonewbie
Meinst du OriginalPoint oder tatsächlich OriginalLocation?

Ich habe folgende Funtion:

function GetZonePoints(refPt, radi)
local dist = Wherigo.Distance(radi, 'm')
local pts = {
Wherigo.TranslatePoint(refPt, dist, 22.5),
Wherigo.TranslatePoint(refPt, dist, 67.5),
Wherigo.TranslatePoint(refPt, dist, 112.5),
Wherigo.TranslatePoint(refPt, dist, 157.5),
Wherigo.TranslatePoint(refPt, dist, 202.5),
Wherigo.TranslatePoint(refPt, dist, 247.5),
Wherigo.TranslatePoint(refPt, dist, 292.5),
Wherigo.TranslatePoint(refPt, dist, 337.5)
}
return pts
end

Beim Starten der Cartridge setzte ich: dist = Wherigo.Distance(20,'m')

Und einen 5sec. Timer der folgende Befehle alle 5 sec. auslöst:
Zone auf Inaktiv setzen
d, b = Wherigo.VectorToPoint(Player.ObjectLocation,zoneTribute.OriginalPoint)
b=b+180
dm=d:GetValue("m")
p = Wherigo.TranslatePoint(zoneTribute.OriginalPoint,dist,b)
zoneTribute.OriginalPoint=p
zoneTribute.Points=GetZonePoints(p,10)
und dann die Zone wieder aktiv setzen


Die Zone bewegt sich, aber der Abstand unter Locations bleibt unverändert. Auch wenn man ein Objekt in der Zone Plaziert, bleibt der Abstand zum Objekt unter You See immer gleich.
Ruft man im Timer eine Nachricht auf, in der der Abstand (Variable dm") ausgegeben wird, wird diese Zahl allerdings passend zur Zonenbewegung kleiner.

Idee?
 

Charlenni

Geomaster
Ich habe es noch nicht ganz verstanden. Wenn ich deinen Code anschaue, dann bleibt dist immer auf 20 m und ändert sich nie. Deshalb sollte sich eigentlich nur die Richtung, aber nicht der Abstand ändern.

Ach, übrigens, es ist verwirrend, wenn es eine globale Variable dist und eine lokale Variable dist (in der Funktion GetZonePoints) gibt. Das führt zu Fehlern.
 
OP
S

silkeundmichael

Geonewbie
Hmm, das mit dem doppelten Variablennamen "dist" sehe ich ein, habe die Var in der Funktion mal umgenannt. Bringt aber keine Verbesserung:

Ich habe nun folgende Funtion:

function GetZonePoints(refPt, radi)
local xdist = Wherigo.Distance(radi, 'm')
local pts = {
Wherigo.TranslatePoint(refPt, xdist, 22.5),
Wherigo.TranslatePoint(refPt, xdist, 67.5),
Wherigo.TranslatePoint(refPt, xdist, 112.5),
Wherigo.TranslatePoint(refPt, xdist, 157.5),
Wherigo.TranslatePoint(refPt, xdist, 202.5),
Wherigo.TranslatePoint(refPt, xdist, 247.5),
Wherigo.TranslatePoint(refPt, xdist, 292.5),
Wherigo.TranslatePoint(refPt, xdist, 337.5)
}
return pts
end

Beim Starten der Cartridge setzte ich weiterhin (global): dist = Wherigo.Distance(20,'m')

Der 5 sec.Timer funktioniert folgendermaßen:

Zone auf Inaktiv setzen, da man eine aktive Zone angeblich nich verschieben kann

d, b = Wherigo.VectorToPoint(Player.ObjectLocation,zoneTribute.OriginalPoint)
(den Abstand und Winkel zwischen Spieler und Zone berechnen)

b=b+180
(Den Winkel um 180 Grad drehen, da er aus der Sicht des Spielers ist, sonst läuft die Zone weg, statt dass sie sich nähert)

dm=d:GetValue("m")
(Den ermittelten Abstand in Meter formatieren, ist nur für eine Anzeige in der Message, für die Bewegung unwichtig)

p = Wherigo.TranslatePoint(zoneTribute.OriginalPoint,dist,b)
(p bekommt den aktuellen Zonen-Mittelpunkt um 20m verschoben zugewiesen)

zoneTribute.OriginalPoint=p
(der Zonen-Mittelpunkt wird auf die verschobene Position p gesetzt, da diese und die letzte Zeile bei jedem Timerdurchlauf abgearbeitet werden, wird die Zone jedes mal um 20m versetzt und nicht nur der Winkel geändert)

zoneTribute.Points=GetZonePoints(p,10)
(Die Eckpunkte der Zone werden durch die Funktion im Radius von 10m um den neuen Mittelpunkt gesetzt)

und dann die Zone wieder aktiv setzen

Wie gesagt, die Zone wandert sowohl im Simulator als auch auf meinem Garmin einwandfrei auf den Spieler zu.
 

Charlenni

Geomaster
Ich glaube, jetzt habe ich meinen Denkfehler bemerkt. Die Zone wird immer um genau 20 m (Wert von dist) in Richtung Spieler (b = b +180) verschoben.

Man kann aktive Zonen verschieben. Kein Problem. Nur, es bekommt nicht alle mit [:)]. Manche Player aktuallisieren ihre Anzeige nur dann, wenn die Zone aktive/inaktive wird.

Du kannst mal versuchen, nach dem Ändern der Zone mit einem ShowScreen die Liste anzuzeigen, damit diese neu aufgebaut wird. Ansonsten kann ich leider nur spekulieren: Garmins und Emulator (sehr eng "verwandt") aktualisieren die Anzeige von Listen nicht bzw. nur dann, wenn sich der Spieler bewegt (schon einmal versucht?).

Eventuell könntest du mir die Cartridge zukommen lassen (info(at)wfplayer.com). Dann schaue ich mir es an.
 
OP
S

silkeundmichael

Geonewbie
Show-Screen bringt nichts.

Der Abstand, welcher unter "Locations" zu sehen ist, ändert sich wenn sich der Spieler bewegt, wird jedoch immer zu dem Punkt berechnen, an dem die Zone zum ersten mal erzeugt wurde und nicht zur geänderten Position.
 
OP
S

silkeundmichael

Geonewbie
Leider ist das Problem noch nicht gelöst.
Hat jemand schon mit Bewegten Zonen gearbeitet? Wie verhält sich das bei euch?

Viele Grüße,
Michael
 

CachingFoX

Geocacher
Bei welchem Player tritt den das Problem auf?

Beim WhereYouGo Player auf Android sieht der Code zur Entfernungsberechnung in der Zonen-Liste wie folgt aus. Zonen werden anders behandelt als andere Objekte.

if (thing instanceof Zone) {
nearest.setLatitude(((Zone) thing).nearestPoint.latitude);
nearest.setLongitude(((Zone) thing).nearestPoint.longitude);
} else {
nearest.setLatitude(thing.position.latitude);
nearest.setLongitude(thing.position.longitude);
}

Und nach ein Blick in die Wherigo Engine openwig, die auch WhereYouGo nutzt: Ist mir nicht wirklich klar, ob auch immer der Member nearestPoint aktualisiert wird.

Gruß
CachingFoX
 
Oben