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

standby und der Timer

Sabeta

Geocacher
hi,

ich habe einen etwas längerlaufenden Timer der im 1-Minuten-Takt herunterzählt und dabei einige Variablen und Zonen- bzw- Item.Beschreibung entsprechend aktuallisiert, man sieht somit immer den aktuellen Fortschritts des Timers.

Nun habe ich festgestellt, das beim Ausschalten des Handydisplays der Timer stehen bleibt und erst dann weiter geht wenn das Display wieder aktiv ist. Das ist natürlich nicht in meinem Sinne, schalte ich doch selbst bei langen Wherigos gerne das Display aus und warte auf as kurze Ssss (Vibrationsalarm) das mir eine neue Aktion ankündigt, so spart man kostbaren Strom und verpasst trotzdem nichts (z.B. versteckte Zonen).

Da der Wherigo ja auch bei dunklen Display weiterläuft, sollte doch eigentlich auch der Timer weiter laufen. Gibt es da eine Option im Urwigo oder im Player?

Sabeta
 

Charlenni

Geomaster
Bei welchem Player kannst Du denn das Gerät ausschalten und das Spiel geht weiter?

Was in solchen Pausen gemacht wird, ist nicht klar geregelt. Gab es zu den Zeiten (Garmin und PocketPC) wohl noch nicht. Auch was nach dem Starten eines gespeicherten Spieles passiert, oder passieren soll, ist unklar. Das hängt also vom Gerät ab.

Manche Geräte können im Hintergrund Programme laufen lassen, auch wenn sie eigentlich ausgeschaltet sind. Andere können das nicht. Du hast offensichtlich einen, der das kann.

Nun gut. Du kannst das Ganze natürlich auch nicht über Variablen, die hoch oder runter gezählt werden, machen, sondern über feste Uhrzeiten. Ein Timer hinterlegt normalerweise (also auf Emulator und Garmin) die Startzeit in timer.StartTime. Das kannst Du natürlich auch machen. Du merkst Dir os.Time() und schaust beim nächsten Tick, wieviel Zeit tatsächlich vergangen ist. Urwigo bietet dazu ja Funktionen. Entsprechend werden dann die Dinge geupdatet. So bist Du unabhängig von irgendwelchen Timeraussetzern.
 
OP
S

Sabeta

Geocacher
Danke, das ist eine Idee und werde ich mal umsetzen.

Auf Android geht es, das man das Display ausschaltet, man muß dazu nur in den Einstellungen vom WhereYouGo unter "GPS und Lage" ein Häckchen bei "Deaktivieren, wenn ausgeschaltet" entfernen, dann läuft der Wherigo auch bei ausgeschalteten Display normal weiter, spielt Sounds ab usw. und wenn etwas passiert (Zone/Dialog) dann gibt es eine kurze Vibration.

Hält man das Handy in der Hand, merkt man das. Gerade bei längeren Wherigos sinnvoll, wenn Saft haushalten angesagt ist.

Sabeta
 
OP
S

Sabeta

Geocacher
Die Sache mit dem Timer stellt sich als komplizierter heraus als anfangs gedacht.

denkt ihr, dass ich es folgendermaßen umsetzen kann? Das ist jetzt nur Grob, die Befehle jetzt nicht auf die Goldwaage legen (ich habe den LUA-Syntax nicht im Kopf), es geht mir erstmal um die prinzipielle Umsetzung, vorallem die Sache mit dem Abspeichern ist mir wichtig, die Zeit darf nicht weiterlaufen wenn der Wig unterbrochen wird.

Code:
-----Begin-----
timer_start = os.date()
timer_time = 20 * 60
timer()

--Timer (60s)--
timer_aktuell = os.difftime(os.date,timer_start)
if (timer_aktuell < timer_time)
{
  if (timer_aktuell > 0)
  {
    print(noch..math.ceil(timer_aktuell/60)..Minuten) 
    timer()
  } 
  else
  {
    //Zeit abgelaufen//
  }
}
else
{
  //Zeit abgelaufen//
}

------Save------
timer_start = os.date()
timer_time = timer_aktuell
save()

Sabeta
 

Charlenni

Geomaster
Stimmt fast ;)

In timer_time ist die Gesamtzeit, timer_aktuell enthält die bereits abgelaufene Zeit. Wenn Du nun beim Abspeichern timer_time = timer_aktuell setzt, dann ist die Gesamtzeit nach dem Speichern gleich der bereits abgelaufenen Zeit. Nach 19 min speichern und laden ergibt 19 min Restzeit.

Eventuell reicht es ja auch, wenn Du timer_time bei jedem Tick um 60 erniedrigst und die Variable timer_time in die ZVaribles einträgst. Dann wird sie automatisch mitgespeichert und steht nach dem Laden gleich zur Verfügung. Variable timer_aktuell fällt weg.

Und bei os.difftime() wäre ich vorsichtig, ob es das auf allen Geräten gibt. Brauchst Du ja dann auch nicht mehr.
 

hihatzz

Geomaster
Sabeta schrieb:
Nun habe ich festgestellt, das beim Ausschalten des Handydisplays der Timer stehen bleibt und erst dann weiter geht wenn das Display wieder aktiv ist.

Heisst das, mit den "normalen" Timer kann man mit Android-Geräten (wie ist es mit Apple?) "besche*ssen" indem man das Display deaktiviert?

Was passiert eigentlich beim Oregon wenn man den ausschaltet?
Bleibt da der Timer auch stehen (was ich erwarten würde)?
 
OP
S

Sabeta

Geocacher
Ich werde diesen Umstand dieses Wochenende nochmal vor Ort testen und vergleichen was passiert bei Gerät A mit Display aus und Gerät B mit Display an.

Bisher teste ich mit FakeGPS meinen Wherigo und da fiel mir das eben auf.

Sabeta
 

jonny65

Geomaster
Timer unter WhereYouGo laufen im Standby weiter, insofern ich den "gleichen Standby" meine, wie ihr. Also beim Galaxy die Aus/Ein Taste antippen, so daß der Bildschirm ausgeht. Das hat übrigens nix mit den Einstellungen bei "GPS und Lage..." zu tun. Dort ist der GPS Empfang gemeint, der OHNE gesetztem Haken an bleibt. Drum schreiben Newbies auch immer "Sch**** Technik, dauernd geht das GPS aus...", weil sie den Haken drin haben. Garmin läuft ebenso weiter, wenn das Display abschaltet. WF.Player stoppt, @Dirk > Issue folgt :/ iPhone könnte mal jemand probieren, wie sich das da verhält.
 

Charlenni

Geomaster
Aber ist das nicht das gewünschte Verhalten? Wenn ich das Display ausmache, dann soll es auch nicht weiter gehen. Wenn ich ein anderes Spiel auf dem Smartphone spiele und den Bildschirm ausmache, dann hält das auch an und spielt nicht ohne mich weiter :roll: Oder es kommt ein Telefonanruf und das Spiel wird unterbrochen. "Habe noch 30 Sekunden Zeit, die Aufgabe zu erfüllen und der Chef klingelt mit seiner Lebensgeschichte durch". Möchte ich dann, dass es weiter läuft? Im Prinzip reicht es, wenn man beim Aufwachen die Timer überprüft, ob einer abgelaufen ist. Aber das GPS im Hintergrund die Akkus leer lutschen zu lassen, bringt dann doch nichts.
 

hihatzz

Geomaster
Finde ich gerade nicht.
Wird doch ein Timer oft verwendet (oder lieg ich da falsch) um zu kontrollieren ob man eine Aufgabe / Zone in einer gewissen Zeit schafft.
Kann ich jetzt den Timer anhalten indem ich das Gerät in den Standby versetzte oder abschalte (mit Speicherung) und später wieder aktiviere umgehe ich das und kann ganz gemütlich die Aufgabe erledigen bzw. zur Zone schlendern. (Von besche*ssen will ich da jetzt mal nicht reden :roll:)
 

Charlenni

Geomaster
Nur weil ein Timer während der Bildschirm dunkel ist nicht läuft, muss der Timer ja nicht ausgeschaltet sein. Die Timer werden alle überprüft, sobald der Bildschirm wieder an geht. Ist einer abgelaufen, dann wird das OnTick Ereignis aufgerufen. Und ob das Ereignis nun abläuft, wären der Spieler zum Ziel rennt, oder wenn er nach dem langsamen dorthin schlendern vor Ort das Gerät wieder einschaltet, ist ja egal.

Wichtig ist in allen Fällen, dass man unterscheidet zwischen Timern, die bis zu einer bestimmten Zeit laufen und solchen, die eine bestimmte Zeit laufen. (Toller Satz :D) Kleiner aber feiner Unterschied.
 

jonny65

Geomaster
Ne, geht nicht nur um die platten Funktionen wie "du musst in 2 Minuten in Zone X sein", sondern und gerade um Intervall die anfangen zu laufen um dann alle 30 Sekunden was auszulösen, z.b Verringerung der Lebensenergie in einer Seuchenzone :/ Zusätzlich noch Hinweise aufpoppen lassen oder Bilder oder Sounds oder oder oder. Das alles verpufft, wenn der Timer pennt.

Kompromissmöglichkeit :Sind Attribute irgendwie denkbar ? Z.b gibt der Programmierer dem Timer die Eigenschaft "Stay on top" oder sowas. Soll heißen dieser Timer läuft im Hintergrund genauso wie im Vordergrund. Fehlt das Attribut, darf er schlafen.
 

Charlenni

Geomaster
Nun ja, darüber habe ich mir schon einige Gedanken gemacht.

Man muss zwischen zwei Arten von Timern unterscheiden: solche, die nach einer bestimmten Zeit auslaufen und solche, die zu einer bestimmten Zeit auslaufen.

Timer, die nach einer bestimmten Zeit auslaufen werden für Dinge benutzt, die nicht von der abgelaufenen Zeit abhängen. Z.B. kann man mit diesen Positionen aktuallisieren oder Uhren auf den neuesten Stand bringen. Werden diese pausiert (und pausiert schließt hier Bildschirm dunkel genauso wie Spiel speichern ein), so reicht es aus, diese einfach neu zu starten.

Anders sieht es mit Timern aus, die zu einer bestimmten Zeit auslaufen sollen. Hier ist nicht die Zeit bis zum Eintreten des Ereignisses, sondern der Zeitpunkt des Ereignisses wichtig. Diese sollen auch bei Bildschirm dunkel oder bei Spiel gespeichert zum richtigen Zeitpunkt ablaufen. Allerdings ist dann ja gerade das Spiel nicht aktiv. Also muss das Ereigniss gleich eintreten, wenn die Cartridge wieder aktive wird (Bildschirm an oder Spiel geladen). Zu diesem Zeitpunkt muss dann überprüft werden, ob das Ereignis eintreten soll, also die Endzeit erreicht ist. Hier ist nun der Author gefragt, der überprüfen muss, ob der angestrebte Zeitpunkt und der tatsächlich Zeitpunkt zusammen fallen oder, wenn nicht, was gemacht werden soll.

Richtig wäre als: Timer werden bei Bildschirm dunkel angehalten, da der Spiele keine Kontrolle mehr über das Spiel hat. Authoren merken sich die Zeit des letzten Aufrufes des Timers und überprüfen beim nächsten Aufruf, wieviel Zeit vergangen ist. Entsprechend wird dann z.B. die Uhr weiter gezählt.

Um es abschließend zu sagen: nur der Author kann sagen, was genau in seinem Timer Ereignis passieren soll. Sicher ist nur, dass zwischen einem Ereignis und dem nächsten nicht weniger als die eingestellte Zeitdauer vergangen ist. Ein Wert von 10 Sekunden bedeutet, dass mindestens 10 Sekunden seit dem letzten Ereignis vergangen sind.
 

jonny65

Geomaster
Da hätten wir mal einen Action Wherigo ... der Spieler befindet sich vor einem kleinen Hügel. Er hat nun die Aufgabe auf die andere Seite zu kommen. Die Zone ist aktiv und sichtbar. Er kann außenrum und wird damit wohl weiter laufen, aber er muss keinen Anstieg hoch. Um den Hügel herum sind aber Zonen gespannt in denen der Spieler alle 60 Sekunden von Viechern gebissen wird und Lebensenergie verliert. Läuft er über den Hügel wird er zwar auch verletzt, aber nur alle 2,5 Minuten. Zusätzlich soll die überwundene Höhendifferenz gemessen werden, dazu wird alle 10 Sekunden die Höhe genommen und mit der letzten verglichen. Unschärfen werden ausgefiltert, indem man ein Minimum von 3 Metern pro Messung ansetzt. Nur dann wird akkumuliert. Die Höhenmeter ergeben Bonuspunkte. Ähm, was wollt ich jetzt eigentlich sagen ? :???: :D Also er schaltet unten am Hügel auf Standby, der Timer stoppt bzw. beide Timer und er kommt nach sagen wir mal 10 Minuten in der Zielzone an. Welche Lebensenergie und welche Höhendifferenz / Bonus zeigt jetzt dein Player an ?
 
OP
S

Sabeta

Geocacher
Also mit aktivierten GPS scheint der Timer auch im Standby weiterzulaufen, Unsicherheiten habe ich aber noch. Vor Ort war es so, dass in meinem speziellen Fall die Zeit nur 6min war. Zuhause aber durchaus mal das Handy zur Seite gelegt wurde und z.B. erst nach einr Studne wieder angefasst wurde, da war dan die Restzeit z.B. 15min, der Timer aber würde nur 30min laufen und müsste demzufolge längst abgelaufen sein. In meinen Fall ist es egal, da die Leute erstmal einfach nur weiterlaufen sollen und erst später an der Stelle weitermachen sollen, daher überhaupt die Zeitspanne von 30min. in der Annahme das niemand diese Zeit stehend wirklich abwartet (was auch nicht schlimm wäre) :D


Das Hügelproblem, nunja, es gibt in Wells einen Wherigo namens Snake oder so, da wird man von nichtsichtbaren Schlange gebissen, man weiß nur von wo sie kommen (Text), da hilft auch ausschalten, zur Zielzone laufen und wieder einschalten. Ich finde das aber nicht schlimm. Sicher liesse sich soetwas abfangen - aber warum? Die Wherigos sollen Spaß machen und mir wäre wichtig das ich nur soviel einbaue wie ich auch programmiertechnisch in der Hand habe. Ich hatte mal eine Wherigo gemacht, da hat der Owner das GPS-Signal beobachtet um das ausschalten zu verhindern, das dumme war nur, wenn man wirklich den GPS-Empfang verlor war man auch drausen, entsprechend negativ fiel mein Log auf GC aus, denn lief dann nur noch passiv mit. Wenn ich nicht in der Gruppe gewesen wäre, hätte ich neu anfangen müssen.


Die richtige Lösung wäre eigentlich ein Timer, den man z.B. auf 30min einstellt und ablaufen lässt, aber in 1min-Takt abfragen kann wie weit der Timer fortgeschritten ist. Dann könnte ich auch das Gerät ausschalten. wenn ich nach 10min einschalte würden mir 20min verbleiben, wenn ich das Gerät nach 40min einschalte, wäre der Timer abgelaufen.

Sabeta
 

Charlenni

Geomaster
Was der Player anzeigt: ist doch klar, dasselbe wie die Garmin-Geräte, bei denen die Cartridge abgespeichert wird und am Ziel wieder gestartet werden.

Der einzige Player, der es anders macht, ist der WhereYouGo. Dort geht Multitasking, so dass der Timer auch im Hintergrund laufen kann. Schon auf dem iPhone dürfte das nicht gehen, da es dort kein Multitasking gibt. Und auf ausgeschalteten Garmins schon gar nicht.

Also was tun? Unsichtbare Zonen wären eine Hilfe, die durchlaufen werden müssen. Oder Timer, die eine Endzeit haben.

Sowohl aus Jonny65, als auch Sabetas Fall wird eines klar: Bei Wherigos darf man sich nicht darauf verlassen, dass etwas immer da ist. Weder das GPS Signal, noch ein Timer, der unbedingt immer alle 10 Sekunden ticken muss. Das klappt nicht. Und das ist für die meisten Leute auch das Schwierigste an Wherigos. Das fängt bei Nachrichten an, die von anderen Bildschirmen von Bildschirm verdrängt werden und hört bei Timern auf, die, wenn das Gerät ausgeschaltet ist, nicht mehr weiterlaufen. Will man es perfekt machen, dann muss man all dies abfangen. Oder man lebt mit den Einschränkungen. Oder man sagt, dass dieser Wherigo nur genau auf dem einen Gerät mit dem einen Player läuft.
 

jonny65

Geomaster
Also zurück zu DOS 3.3, programmieren in Assembler mit debug.com und Peek und Poke für die Grafik. Von ausschalten war ja nicht die Rede, es ging um den Standby oder Energiesparmodus und da läuft selbst der Garmin weiter. Das Handling ist doch allzu logisch. Wie hier schon erwähnt wurde, Akku knapp, Weg ist noch lang, Gerät auf Standby und auf die (optional zuschaltbare) Vibration achten. Also muss das Spiel im Standbymodus natürlich weiter laufen. Wenn das systembedingt auf Gerät X doch nicht gehen sollte (iPhone ?), gehts halt nicht, aber deswegen kann der Player das doch "unterstützen". Diesbezüglich sollte der Fokus bei der Entwicklung eh auf die Plattform zielen, die am meisten genutzt wird, eben Android. Die 15% iPhone Spieler haben dann halt "Glück" und können den Timer in der Todeszone ausschalten. :/
 

Charlenni

Geomaster
Was ist denn der Energiesparmodus beim Garmin. Ich dachte immer, der ist an oder aus und mehr ist nicht.

Weiterlaufen heißt was? Dass auch das GPS läuft? Oder wird das GPS ausgeschaltet? Und wenn es läuft, woher weiß dann das Gerät, dass Du noch spielst und nicht nur vergessen hast, das Spiel abzuschalten, bevor der Telefonanruf kam und Du dann ins Bett bist. Und schon ist der Akku am nächsten Morgen tot.

Zurück zu Assembler brauchen wir nicht ganz, aber es muss klar sein, was man erwartet. Meine Ausgangslage war nie, einen Super-Player zu machen. Oberstes Ziel war immer, einen Player zu machen, der sich auf allen Geräten gleich verhält. Für die Version 1.0 heißt das, dass eine Cartridge, die auf dem Garmin oder dem Emulator läuft, auch so auf dem Player laufen soll. Nicht vorgesehen war eine Version, die auf Android so und auf iPhone so läuft und womöglich auf WinPhone nochmals anders. So etwas wie ein weiterspielen als Hintergrundprozess muss auf allen Geräten gleich funktionieren. Sonst sind wir keinen Schritt (wenigstens aus meinem Blickwinkel) weiter wie im Augenblick. Wieder muss auf allen Platformen getestet werden und wieder braucht man dutzende Zeilen von Text um zu erklären, warum dieses oder jenes nur auf dem Gerät, aber nicht auf dem anderen Gerät läuft.
 

jonny65

Geomaster
Klar muss das GPS im Standby weiterlaufen, deswegen auch immer den absolut überflüssigen (Wherigo ohne GPS spielen :irre: ) Haken raus beim Whereyougo Player.

Das Gerät muss nicht wissen ob ich noch spiele oder vergessen habe es auszuschalten. Dafür muss ich natürlich sorgen. Wenn ich aus dem Auto steig, empfiehlt es sich ja auch den Motor abzustellen. Wenn ich das vergesse und der Tank ist am nächsten Tag leer, bin schon ich Schuld, nicht das Auto. Naja...obwohl...es könnte ja auch mal mitdenken "komisch, schon lang nicht mehr Gas gegeben...dann schalt ich halt mal ab." :D

"Energiesparmodus" beim Garmin ist gekoppelt mit der Beleuchtungsdauer. Der Effekt ist so wie wenn man beim Galaxy auf die Ein/Aus Taste tippt : Display dunkel. Ich hab beim Garmin die Dauer zum Test mal auf 15 Sekunden gestellt und den Telefontimer gestartet. Bimmelt weiter auch wenn der Bildschirm aus ist, eigentlich ja irgendwie selbstverständlich find ich.

Also : Auf jedem Gerät muss das Spiel mit GPS Empfang, Timern und Events so weiterlaufen, als wenn der Bildschirm an wäre. Oder : Der einzige Unterschied zwischen normalem Betrieb und Standby ist das dunkle Display :/
 
Oben