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
                Administrator

                  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
                      Administrator

                        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
                        Administrator

                          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
                            Administrator

                              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
                                Administrator

                                  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
                                  Administrator

                                    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.