Bildschirm vorübergehend deaktivieren

Startseite Foren Deutsches LiveCode-Forum Bildschirm vorübergehend deaktivieren

Schlagwörter: 

Ansicht von 15 Antwort-Themen
  • Autor
    Beiträge
    • #18810
      aricco54
      Teilnehmer

      Hallo!

      Mein Problem:

      In meiner App befindet sich eine Seite (SEITE A) mit mehreren Bildern (Kleinbild_1, Kleinbild_2, Kleinbild_3…), die zur Auswahl stehen. Wird ein Bild ausgewählt, zeit das Programm eine neue Seite (SEITE B). Hier wird ein größeres Bild gezeigt, und Musik ist zu hören. Am Ende der Musik erscheint wieder die SEITE A.

      Ich möchte verhindern, dass während der Besichtigung der SEITE B, das Display vom User anklickt wird. Grund: Wenn er das Bildschirm an einer Stelle berührt, wo später ein anderes Kleinbild stehen wird, wird diese Information fälschlicherweise als richtige Auswahl „verstanden“.

      Wie verhindere ich, dass wenn das Bildschirm auf SEITE B berührt wird, das für SEITE A Folgen hat?

      Ich hoffe, Ihr versteht, was ich meine…

      LG
      Antonio

    • #18819
      Torsten
      Teilnehmer

      Hi Antonio,

      die Frage meinerseits wäre, warum das Klicken auf Seite B als falsche Auswahl verstanden wird? Geht das mouseUp-Event an einen Handler im Stack?

      In diesem Fall müsstes Du ja eigentlich nur den Mausklick auf Seite B „abfangen“, so dass er in der Message-Hierarchie nicht weiter nach oben gelangt. Das geht ganz einfach: im Card-Script der Seite B einfach folgenden Handler einfügen:

      on mouseUp
      end mouseup

      Der Handler empfängt den Klick, tut aber nichts und gibt die Nachricht auch nicht weiter (das würde man mit pass mouseup machen).

      Probiers mal aus.

      LG
      Torsten

    • #18826
      aricco54
      Teilnehmer

      Hallo Torsten!

      Vielen Dank für die Hilfe, aber irgendwie mache ich etwas falsch. Wie Du empfohlen hast, habe ich auf der B-Seite

      on mouseUp
      end mouseup

      hinzugefügt, aber das Problem bleibt. Zum besseren Verständnis: Auf Seite A sind acht kleine Tierbilder zu sehen. Per Zufall wird ein Tier ermittelt und eine Stimme sagt dessen Name, zum Beispiel „der Hund“. Wenn der Spieler das entsprechende, richtige Bild berührt, erscheint die Seite B und der Hund bellt (wenn er das falsche Tier anklickt, gibt es einen akustischen Hinweis, dass die Antwort falsch war).

      Während des Bellens sollte dem Spieler das Anklicken unterbunden werden. Wenn er aber das Bildschirm doch berührt, zum Beispiel genau da wo auf Seite A das Pferd steht, kann Folgendes passieren:

      Nach dem Bellen erscheint wieder die Seite A (ohne Hund). Nun sagt die Stimme „die Kuh“, aber das vorherige Berühren des Pferd-Bereichs wird als Fehler interpretiert.

      Wie gesagt, ich habe auf Seite B den „MouseUp“-Code hinzugefügt, aber nichts ändert sich.

      Was tun?

      Herzliche Grüße
      Antonio

      PS: Ich habe versucht Bilder zu diesem Post hinzuzufügen, aber es funktionierte nicht.

    • #18828
      Torsten
      Teilnehmer

      Hi Antonio,

      versuch mal den Ansatz mit „wait until…“

      In dieser Lektion von Livecode wird erklärt, wie man Sounds abspielt und das Programm solange nicht reagieren lässt, bis der Sound vorbei ist: http://lessons.livecode.com/m/4071/l/25230-play-sounds

      Der Code dafür ist:

      on mouseUp
         play audioClip "/Users/davidwilliams/desktop/audiolesson/hello.aif"
         wait until the sound is done
         answer "Sound is done!"
      end mouseUp

      Statt dem answer-Befehl wird in Deinem Fall wahrscheinlich der „go to card A“-Befehl kommen.

      LG
      Torsten

    • #18832
      aricco54
      Teilnehmer

      Hallo Torsten!

      „wait until the sound is done“ hatte ich schon eingebaut. Deswegen wird zuerst beim Hund das Bellen vollständig abgespielt, bevor die Seite wechselt. Hier scheint nicht mein Fehler zu liegen.

      Das Problem ist, dass das Programm das felsche Berühren der Bildschirmfläche erinnert und missinterpretiert.

      LG
      Antonio

    • #18839
      Klaus Major
      Verwalter

      Zum besseren Verständnis:
      Mit SEITE meinst Du KARTE, ja?

      Wenn ja, wieso passiert auf Karte B etwas, was eigentlich
      auf Karte A passieren sollte? -> Mausklick
      Was und wie hast Du denn geskriptet so weit?

    • #18841
      aricco54
      Teilnehmer

      Hallo Klaus!

      Mit SEITE meinst Du KARTE, ja?

      Ja. Mein Code für die betroffenen Teile des Programms:

      // ############################################################
      // CARD "SEITE_A"
      // ############################################################
      
      global klangpfad, klangdatei
      global anzahl, zufallszahl, alternativen, ausgewaelte
      global bildliste, bilderpfad, sprache
      
      on openCard
         
         if alternativen = "A,B,C,D,E,F,G,H" then
            
            set the visible of img("foto_1") to true
            set the visible of img("foto_2") to true
            set the visible of img("foto_3") to true
            set the visible of img("foto_4") to true
            set the visible of img("foto_5") to true
            set the visible of img("foto_6") to true
            set the visible of img("foto_7") to true
            set the visible of img("foto_8") to true
            
         end if
         
         put anzahl - 1 into anzahl
         
         if anzahl >= 1 then
            
            put the number of items of alternativen into anzahl
            put random (anzahl) into zufallszahl
            put item zufallszahl of alternativen into ausgewaelte
            
            hoeren // befindet sich im Stack
            
         else
            
            go to card "Spielende"
            
         end if 
         
      end openCard
      
      // ############################################################
      // Code der acht Bilder, die auf CARD "SEITE_A" zu sehen sind
      // ############################################################
      
      global ausgewaelte
      
      on mouseUp 
         if ausgewaelte = "A" then
            set the visible of img "foto_1" to false
            go to card "Seite_B"
         else
            go to card "Fehler_Card"
         end if
      end mouseUp
      
      // ############################################################
      // CARD SEITE_B
      // ############################################################
      
      global klangpfad, klangdatei
      global zufallszahl, alternativen, sprache
      
      on openCard
         delete item zufallszahl of alternativen
         if ausgewaelte = "A" then
      		put klangPfad & "tiergeraeusche.wav" into klangdatei
         end if
         //... usw für alle acht Tiere
         play klangdatei
         wait until the sound is done
         wait 500 milliseconds
         go to card "Seite_A"
      end openCard

      Wenn ja, wieso passiert auf Karte B etwas, was eigentlich
      auf Karte A passieren sollte? -> Mausklick

      Auf Seite A hört der Spieler einen Namen (Hund) und sieht acht Tierbilder. Er wählt das hoffentlich richtige Bild aus, indem er das Bild anklickt.

      Auf Seite B wird keine Entscheidung getroffen! Der Spieler sieht ein größeres Bild des Tieres und hört seine Tiergeräusche. Er muss hier eigentlich keine Auswahl treffen und nichts anklicken: Da das Spiel für Kleinkinder gedacht ist, werden sich die Spieler jedoch nicht immer an meine Regeln halten… 😉

      LG
      Antonio

    • #18843
      aricco54
      Teilnehmer

      Hallo Klaus!

      Die Antwort auf die 1. Frage ist Ja

      Für die 2. Frage: Die Entscheidung des Spieler wird nur auf Karte A getroffen (durch anklicken eines Bildes).

      Mein Code im betroffenen Teil des Programms:

      // ############################################################
      // CARD "SEITE_A"
      // ############################################################
      
      global klangpfad, klangdatei
      global anzahl, zufallszahl, alternativen, ausgewaelte
      global bildliste, bilderpfad, sprache
      
      on openCard
         
         if alternativen = "A,B,C,D,E,F,G,H" then
            
            set the visible of img("foto_1") to true
            set the visible of img("foto_2") to true
            set the visible of img("foto_3") to true
            set the visible of img("foto_4") to true
            set the visible of img("foto_5") to true
            set the visible of img("foto_6") to true
            set the visible of img("foto_7") to true
            set the visible of img("foto_8") to true
            
         end if
         
         put anzahl - 1 into anzahl
         
         if anzahl >= 1 then
            
            put the number of items of alternativen into anzahl
            put random (anzahl) into zufallszahl
            put item zufallszahl of alternativen into ausgewaelte
            
            hoeren // befindet sich im Stack
            
         else
            
            go to card "Spielende"
            
         end if 
         
      end openCard
      
      // ############################################################
      // Code auf den acht Bildern (hier Bild 1, usw für alle acht Tiere)
      // ############################################################
      
      global ausgewaelte
      
      on mouseUp 
         if ausgewaelte = "A" then
            set the visible of img "foto_1" to false
            go to card "Seite_B"
         else
            go to card "Fehler_Card"
         end if
      end mouseUp
      
      // ############################################################
      // CARD SEITE_B
      // ############################################################
      
      global klangpfad, klangdatei
      global zufallszahl, alternativen, sprache
      
      on openCard
         delete item zufallszahl of alternativen
         if ausgewaelte = "A" then
      		put klangPfad & "tiergeraeusche.wav" into klangdatei
         end if
         //... usw für alle acht Tiere
         play klangdatei
         wait until the sound is done
         wait 500 milliseconds
         go to card "Seite_A"
      end openCard

      Beste Grüße
      Antonio

    • #18845
      Klaus Major
      Verwalter

      Aha, sieht so aus, als ob LC die EVENTS (hier „mouseup“) sammelt und sobald wieder etwas Luft da ist***, werden sie ausgeführt.

      *** Das Kartenskript lässt eben „keine Luft“, um auf „mouseup“ o.ä. zu ragieren!

      Füge diese Zeile dem Skript von „Seite_B“ am Ende hinzu:

      ...
        play klangdatei
         wait until the sound is done
         wait 500 milliseconds
      
         ## Alle gesammelten "mouseup" Events vergessen/löschen:
         get flushevents("mouseup")
      
         go to card "Seite_A"
      end openCard

      Bitte mal ausprobieren und berichten! 🙂

    • #18847
      Klaus Major
      Verwalter

      Noch’n Hinweis! 🙂

      ...
      set the visible of img("foto_1") to true
      set the visible of img("foto_2") to true
      set the visible of img("foto_3") to true
      set the visible of img("foto_4") to true
      set the visible of img("foto_5") to true
      set the visible of img("foto_6") to true
      set the visible of img("foto_7") to true
      set the visible of img("foto_8") to true
      ...

      Strings brauchst Du nicht in Klammern zu setzen, also das hier reicht:
      set the visible of img "foto_8" to true
      Es sei denn, Du möchtest einen String wie Objekt- oder Dateinamen zusammensetzen.
      Hier ein Deinem Fall könntest Du nämlich statt der obigen 8 Zeilen das hier schreiben:

      ...
      ## Immer wichtig bei größeren Änderungen auf dem Bildschirm,
      ## GANZ BESONDERS bei Feldern!
      lock screen
      repeat with i = 1 to 8
        ## Hier sind die Klammern ZWINGEND!
        set the visible of img ("foto_" & i) to true
      end repeat
      unlock screen
      ...

      Fertig! 🙂

      LC wertet nämlich zuerst alles in Klammern aus, bevor der Rest ausgeführt wird und somit löst sich das innerhalb des Loops zu foto_1 bis foto_8 auf!

    • #18852
      aricco54
      Teilnehmer

      Herzlichen Dank für die Tipps, Klaus! Für einen Anfänger wie ich sind sie sehr wertvoll.

      Ich habe sie voneinander getrennt ausprobiert.

      Was

      get flushevents("mouseup")

      angeht, komme ich je nach Umgebung zu unterschiedlichen Ergebnisse.

      Starte ich in LiveCode das Programm, bleibt tatsächlich das falsche Anklicken der Maus wärend der Tiergeräusche ohne Folgen, so wie ich mir gewünscht habe. Aber in der Standalone-Datei für Android hat scheinbar

      get flushEvents("mouseup")

      keine Auswirkung, d.h. wenn der Spieler das Bildschirm berührt, wird das Berühren registriert.

      Frage: Gibt es vielleicht für LiveCode 9.5 einen Unterschied zwischen Auswählen mit Mausklicken und Auswählen mit Berührung auf einem Touchscreen mit einem Finger? Und wenn ja, wie kann ich das berücksichtigen?

      LG
      Antonio

    • #18855
      Klaus Major
      Verwalter

      Hi Antonio,

      Android, AHA! Bitte immer sofort angeben, ob Desktop oder Mobil, denn „flushevent“ funktioniert nur auf dem Desktop.

      Gibt es vielleicht für LiveCode 9.5 einen Unterschied zwischen Auswählen mit Mausklicken und Auswählen mit Berührung auf einem Touchscreen mit einem Finger?

      Sicher, aber das ist nur wichtig, wenn Du das auch programmiert hast.

      OK, probieren wir etwas Anderes:

      ## Karte SEITE_B
      global klangpfad, klangdatei
      global zufallszahl, alternativen, sprache
      
      on openCard
         delete item zufallszahl of alternativen
         if ausgewaelte = "A" then
      	put klangPfad & "tiergeraeusche.wav" into klangdatei
         end if
         //... usw für alle acht Tiere
         play klangdatei
         wait until the sound is done with messages
         wait 500 milliseconds with messages
         go to card "Seite_A"
      end openCard
      
      on mouseup
        ##
      end mouseup

      Auf diese Weise geben wir der Engine Zeit, die Klicks zu registrieren (wait … with messages) und lassen sie dann mit dem Dummy MOUSEUP Skript ins Leere verpuffen.

      Bitte mal ausprobieren.

      Gruß

      Klaus

    • #18862
      aricco54
      Teilnehmer

      Hallo Klaus!

      Bitte immer sofort angeben, ob Desktop oder Mobil, denn „flushevent“ funktioniert nur auf dem Desktop.

      Okay, das werde ich mir merken. Danke!

      Sicher, aber das ist nur wichtig, wenn Du das auch programmiert hast.

      Was bedeutet hier „wenn Du das auch programmiert hast“? Wenn gemeint ist, ob ich die Standalone für Android erstellt habe, ist die Antwort „JA“.

      Zum vorgeschlagenen Code: Ich habe es ausprobiert, aber es ändert sich leider nichts.

      Beste Grüße
      Antonio

    • #18864
      Klaus Major
      Verwalter

      Hm, dann bin ich mit meinem Latein am Ende, sorry…

      Was bedeutet hier „wenn Du das auch programmiert hast“?

      Das bedeutet, wenn Du nur „on mouseup“ schreibst, wird auch nur darauf reagiert, wenn Du aber das ganze „on touchstart“ etc. Gedöns geschreiben hast, reagiert LC eben darauf!

    • #18883
      Klaus Major
      Verwalter

      mobilecleartouches, wer hätte das gedacht!? 🙂

    • #18885
      aricco54
      Teilnehmer

      Hallo!

      Ich freue mich mitteilen zu können, das mein Problem gelöst worden ist. Jacqueline Landman Gay hat mir den Tipp gegeben mobileClearTouches zu verwenden. Und es funktioniert perfekt.

      Herzliche Grüße
      Antonio

Ansicht von 15 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.