Startseite › Foren › Deutsches LiveCode-Forum › Bildschirm vorübergehend deaktivieren
Schlagwörter: Bildschirm
- Dieses Thema hat 15 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 10 Monaten von aricco54.
-
AutorBeiträge
-
-
Februar 8, 2020 um 18:37 Uhr #18810
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 -
Februar 8, 2020 um 23:44 Uhr #18819
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 -
Februar 9, 2020 um 09:05 Uhr #18826
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
AntonioPS: Ich habe versucht Bilder zu diesem Post hinzuzufügen, aber es funktionierte nicht.
-
Februar 9, 2020 um 09:54 Uhr #18828
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 -
Februar 9, 2020 um 11:02 Uhr #18832
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 -
Februar 9, 2020 um 17:32 Uhr #18839
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? -
Februar 9, 2020 um 18:28 Uhr #18841
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? -> MausklickAuf 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 -
Februar 9, 2020 um 19:23 Uhr #18843
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 -
Februar 9, 2020 um 23:04 Uhr #18845
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! 🙂
-
Februar 9, 2020 um 23:16 Uhr #18847
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!
-
Februar 10, 2020 um 10:55 Uhr #18852
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 -
Februar 10, 2020 um 12:58 Uhr #18855
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
-
Februar 10, 2020 um 17:35 Uhr #18862
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 -
Februar 10, 2020 um 17:39 Uhr #18864
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!
-
Februar 11, 2020 um 20:48 Uhr #18883
mobilecleartouches, wer hätte das gedacht!? 🙂
-
Februar 11, 2020 um 20:49 Uhr #18885
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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.