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

Error bei "keine eingabe"

Monsterbacke

Geonewbie
Hallo zusammen. Ich bastel gerade an einem Wherigo.

In diesem nutze ich einen Timer.
Wenn der Timer Startet hat man z.B. 30 Sekunden Zeit eine Frage zu beantworten. Nun kann ja allerhand passieren.

1: Antwort richtig: Alles bestens. Man erhält einen Punkt
2: Antwort falsch: noch viel besser. Man erhält keinen Punkt.

Da sich das Antwortfenster automatisch öffnet kommt nun leider eine dritte Möglichkeit dazu, die Probleme macht.

3: Der Spieler gibt keine Antwort. Somit läuft der Timer ab und das üblicher Wenn/Dann Gerüst versagt. In dem Moment wenn keine Antwort eingegeben wird (oder nicht rechtzeitig) kommt ein error weil ja mit einer Antwort gerechnet wird.

Ich hoffe ich habe das halbwegs vernünftig ausgedrückt.


Für Hilfe und Anregungen danke ich schon jetzt
 

AoiSora

Geocacher
Falls du das mit Urwigo machst solltest mal ein Bild von deinem Gerüst machen. Ist etwas schwer nachzuvollziehen, wann genau was kommt und was da stört.

P.S. Meine persönliche Meinung zu solch Antworten auf Zeit Sachen: Lass es lieber. Man kann nicht mit jedem Gerät gleichschnell Antworten eintippen. Vor allem mit den Garmins dauert das eintippen allein schon 10x solang wie aufm Smartphone. Zudem vertragen sich hecktische Eingaben mit dem Garmin überhaupt nicht. Da sind die Abstürze schon vorprogrammiert.
 

jonny65

Geomaster
Wenn Eingabe="" dann gleich behandeln wie ein Fehler. Zusätzlich noch das On Error Event des Inputs abfangen und auch dies behandeln wie eine Falscheingabe. Nach Belieben was dranhängen an das Handling, zb eine Messagebox "Leider falsch...nochmal ?" if/else im OnClick der Box, bei Ja entweder gleich in den Input oder Timer neu starten.

Weiß nicht ob ichs so richtig verstanden habe, kommt jetzt fast zu simpel vor :???:
 
OP
M

Monsterbacke

Geonewbie
linker Baum kommt wenn die Antwort richtig war. In dem Fall "Milch".
der rechte Baum wenn die Antwort falsch war.

Nur leider geht es halt nicht wenn keine Antwort eingegeben wurde.

Ablauf:

TIMER startet -> Frage erscheint -> nach XXX Sekunden erscheint ein Antwortfenster -> Eingabe der Antwort ..... und hier dann laut Screen weiter
 

Anhänge

  • screenshoot.jpg
    screenshoot.jpg
    96,7 KB · Aufrufe: 897
OP
M

Monsterbacke

Geonewbie
ja simpel. jetzt wo du es sagst......habe nicht viel verstanden. aber ich versiche es mal.

also ein feld mit WENN Antwort gleich "" (Also leer lassen) dann: Ha Ha Pech gehabt. richtig?


on error abfangen? entschuldigung....ich bin überfragt.
 
OP
M

Monsterbacke

Geonewbie
Also ich hab das mal so gemacht wie ich es verstanden habe. Siehe Bild 1. Darauf folgt Bild 2.
 

Anhänge

  • screenshoot.jpg
    screenshoot.jpg
    97,1 KB · Aufrufe: 888
  • screenshoot2.jpg
    screenshoot2.jpg
    66,3 KB · Aufrufe: 888
OP
M

Monsterbacke

Geonewbie
Also ich habe jetzt mal alles versucht was mir eingefallen ist und habe festgestellt, dass der Fehler WIRKLICH nur dann auftritt wenn keine eingabe erfolgt oder der die eingabe nicht bestätigt wird. es geht also nur darum bei einer leeren oder nicht mit OK bestätigten eingabe den error zu verhindern. kann ich dem programm sagen, dass er nach XXX sekunden automatisch OK ausführen soll. Oder gibt es eine möglichkeit bei wenn/dann eine spalte einzufügen die das ganze puffert. ich bin echt überfragt.
 

AoiSora

Geocacher
Da ich in deinem Konstrukt keinen Timer entdecken kann gehe ich davon aus, dass du einen Countdown verwendest. Countdown versuche ich wenn möglich immer zu umschiffen. Bzw. setze ihn nur ein wenn zu hundert Prozent nichts anderes passieren kann, wenn der Countdown abläuft.

Versuchs mal mit einem Intervalltimer. Setze ihn auf 1 Sekunde und erhöh ein Variable X jeweils um 1. Dadurch hast du in X also die verbrauchte Zeit gespeichert und kannst die dann nach jeder Eingabe prüfen wie groß/wie viel Zeit vergangen ist.
Dadurch vermeidest du, dass der Countdown zündet wenn noch ein leerer Input offen ist.

Der Ablauf sieht dann so aus.
Timer startet -> Frage kommt ->Eingabe erfolgt -> Prüfung auf Zeit und ob richtige Antwort -> wenn X kleiner als maximal Zeit kommt Frage 2 -> Eingabe -> Prüfen ... Solange bis irgendwann X bei der Prüfung größer ist als das Limit

Dadurch muss der Spieler den Input egal wie immer erst schließen bevor irgend etwas neues passiert was stören könnte.
 

jonny65

Geomaster
War doch irgendwie anders, als ichs verstanden hab. Ja, der Bluescreen kommt von der Box die der Timer in den Input feuert. Könnte man ja umschiffen mit dem LUA return oben im Input Block, aber ich find die ganze Sache ist unabhängig davon auch so recht wacklig ... vom Handling her. Ein Spieler ist grad in der Eingabe und dann poppt was auf > irritierend und praktisch schlecht.

Die Lösung wäre imho den Timer zu starten, wenn die Frage kommt, dann den Input auszuwerten und dabei noch zu prüfen ob die Timer Restdauer größer als 1 ist. Natürlich hier den Typ Countdown verwenden. Entweder doppelte Abfrage if Answer=Milch und if Timer.Remain>0 oder das ganze AND verknüpft. Ersteres hat den Vorteil, daß man hier noch sagen kann "Das ist zwar richtig, aber du warst zu langsam". Der Timer macht also nix weiter als von 30 runterzuzählen und wird dann auf die Restzeit abgefragt.
 

AoiSora

Geocacher
@Jonny
ist eigentlich das gleiche was ich auch geschrieben habe, nur dass man bei meiner Variante noch dazuschreiben könnte du warst um 2 Sekunden zu langsam^^ Das geht mit Countdown nicht :^^:

P.S. brauch man für deine Variante nicht auch noch Lua Code? würde man beim Intervall nicht brauchen^^
 

jonny65

Geomaster
Wieso, ich kann bei Ablauf des Countdowns ja noch einen Intervall starten, der die Zeit misst, wie lang ich überzogen habe :p :D :/

Ne, es sind jetzt 2 Sachen vermischt. Unsere Alternativvorschläge zum einen und die Möglichkeit eine Messagebox zu blockieren, die in ein Input funkt.Das war ja das ursprüngliche Problem.
Wichtig ist noch zu unterscheiden, wie eine Leereingabe zu interpretieren ist.Sie kann vom Spieler selber kommen oder eben auch durch die Messagebox (!) des ablaufenden Timers. Abbruch bei keiner/Leer Eingabe wenn Timer Remain auf 0, sonst kann es nur eine Leereingabe vom Spieler gewesen sein. Im Elapse des Countdowns (der ja viiiiiel besser is :D ) steht nur "Du bist ne Schlafmütze". Klar danach noch Abfrage, "Nochmal ? Ja, Nein" und evtl. Timer Neustart. Soll ja hier nur das Prinzip zeigen.
 

Anhänge

  • milchfrage1.jpg
    milchfrage1.jpg
    71 KB · Aufrufe: 601

AoiSora

Geocacher
Dachte timer.remaining muss man mit Lua Code durchführen. Man sieht mal wieder, dass ich von Urwigo keine Ahnung habe^^. Aber meinen dritten WIG will ich dann wahrscheinlich mal mit Urwigo probieren.
 

Makis1

Geonewbie
Hallo!

ich mache gerade ein Wherigo mit Urwigo.

Ich habe das gleiche Problem, und mit der dargestellten Lösung klappt es nicht.
Es ist mein zweiter Wherigo und ich bin noch ein Leie. :hilfe:


Wenn der Spieler keine Eingabe macht und also auch nicht bestätigt soll doch der "Lua Benutzerdefinierte Code" eine Bestätigung simulieren!
Aber das Feld Eingabe wird doch erst bearbeitet wenn der Spieler Bestätigt :???:

Ich habe es so ausprobiert und es geht nicht.
Bild1.PNG

Kann mir jemand den Ablauf genauer erklären?

Danke
 

jonny65

Geomaster
Die Lösung war individuell nach der Vorgabe des Thread Initiators.
Umgesetzt werden sollte die Auswertung einer Antwort, wobei nicht nur richtig,falsch,leer,zurück, sondern auch ein ablaufender Timer während des Inputs behandelt werden soll :

Wenn richtig dann linker If Zweig, wenn Leereingabe vom Spieler oder "Leereingabe" vom ablaufenden Timer (!) dann mittlerer If Zweig, hier Vergleich ob Timer Restzeit größer 0. Wenn dem so ist, kann die Leereingabe nicht vom Timer kommen, denn der läuft ja noch. Wenn andere Eingabe muss die Antwort falsch sein (Else Zweig).

Makis1 schrieb:
Aber das Feld Eingabe wird doch erst bearbeitet wenn der Spieler Bestätigt :???:

Was in meinem Schaubild oben nicht drin ist, ist der Countdowntimer mit einer Messagebox im Elapse Event "Deine Zeit ist abgelaufen". Diese Messagebox die in den Input reinpoppt, interpretiert der Input sozusagen als Leereingabe und die gilt es abzufangen. Der Input geht zu und die Timermessage kommt in den Vordergrund.
 

Makis1

Geonewbie
Danke erst mal.

Das meiste verstehe ich. Das meiste.

Makis1 schrieb:
Was in meinem Schaubild oben nicht drin ist, ist der Countdowntimer mit einer Messagebox im Elapse Event "Deine Zeit ist abgelaufen". Diese Messagebox die in den Input reinpoppt, interpretiert der Input sozusagen als Leereingabe und die gilt es abzufangen. Der Input geht zu und die Timermessage kommt in den Vordergrund.


Elapse Event.....in den Input reinpoppt, interpretiert der Input sozusagen als Leereingabe und die gilt es abzufangen. Der Input geht zu und die Timermessage kommt in den Vordergrund.

Den Teil verstehe ich nicht, könntest du den für Anfänger noch mal darlegen?

Danke im voraus.
 

Charlenni

Geomaster
Nun ja, viel Fachchinesisch, aber eigentlich ganz einfach.

Was passiert, wenn eine MessageBox aufgeht (in diesem Fall, im ElapseEvent, also der Teil, der aufgerufen wird, wenn der Timer abläuft) und gerade eine Eingabe auf dem Schirm ist? Die Eingabe verschwindet vom Schirm, die Funktion, die die Eingabe behandelt wird mit dem Ergebnis "nil" aufgerufen und die MessageBox erscheint auf dem Schirm. Nun ist es aber so, dass die Funktion, die die Eingabe behandelt, meistens nicht mit dem Ergebnis "nil" umgehen kann und deshalb abstürzt. Was tun? Einfach eine Abfrage an den Anfang der Funktion setzen, die überprüft, ob das Ergebnis der Eingabe "nil" ist. Wenn ja, dann soll sie einfach nichts tun. Fertig. Und schon stürzen die Garmins nicht mehr ab. Das ist alles.
 
Oben