Startseite › Foren › Deutsches LiveCode-Forum › Repeat Schleife unterbrechen
Schlagwörter: Repeat Schleife unterbrechen
- Dieses Thema hat 9 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 8 Monaten von Klaus Major.
-
AutorBeiträge
-
-
März 21, 2021 um 22:06 Uhr #27229
Hallo zusammen,
nach langer Zeit hat mich die LiveCode Sucht wieder gepackt.
Ich habe mir für meine Nichten die Aufgabe gesetzt einen kleinen Zahnputztimer zu programmieren.Das klappt auch ganz gut (mit aus und einblenden von verschiedenen Symbolen).
Dazu habe ich eine Repeat Schleife gebaut, die 120 Sekunden läuft.Was ich aber irgendwie nicht hinbekommen, diese Schleife irgendwie zu unterbrechen. Ich möchte einen Button einbauen, der bei Klick die Zeit anhält und mit dem man die Zeit auch wieder loslaufen lassen kann. Ich komme aber irgendwie nicht dazwischen, dass irgendwas auf den Klick auf den Button reagiert. alles ist geblockt.
Wahrscheinlich nur ne Kleinigkeit….aber ich komme nicht weiter.Grüße
Gerti -
März 21, 2021 um 22:31 Uhr #27231
Bitte zeig uns Dein Skript mit dem Loop.
-
März 21, 2021 um 22:47 Uhr #27233
on blenden repeat with x= 0 to 100 set the blendlevel of button "Sonnebild" to x wait 0.1 milliseconds end repeat repeat with x = 100 down to 0 set the blendlevel of button "Sonnebild" to x wait 0.1 milliseconds end repeat end blenden on mouseUp set the icon of button "Gebissbild" to the id of img "q1" of Card "ImageZahn" put 1 into runde put 2 into timer put 1 into kuchen repeat while timer < 120 put timer into fld "Runde" if timer < 120 then put "B"&Kuchen into Bild set the icon of button "Sonnebild" to the id of img (Bild) of Card "ImageSonne" blenden add 2 to timer if timer = 10 then add 1 to kuchen if timer = 20 then add 1 to kuchen if timer = 30 then add 1 to kuchen set the icon of button "Gebissbild" to the id of img "q2" of Card "ImageZahn" end if if timer = 40 then add 1 to kuchen if timer = 50 then add 1 to kuchen if timer = 60 then add 1 to kuchen set the icon of button "Gebissbild" to the id of img "q3" of Card "ImageZahn" end if if timer = 70 then add 1 to kuchen if timer = 80 then add 1 to kuchen if timer = 90 then add 1 to kuchen set the icon of button "Gebissbild" to the id of img "q4" of Card "ImageZahn" end if if timer = 100 then add 1 to kuchen if timer = 110 then add 1 to kuchen if timer = 120 then add 1 to kuchen set the icon of button "Gebissbild" to the id of img "q4" of Card "ImageZahn" end if end if end repeat end mouse
-
März 21, 2021 um 22:49 Uhr #27236
Hat etwas gedauert, bis ich wieder wusste, wie man das Einrücken beibehält :o)
-
März 22, 2021 um 00:27 Uhr #27237
Hi,
1. Tipp: wait x seconds with messages => während des Wartens kann auf andere Messages reagiert werden, z.B. einen Mausklick auf eine Checkbox oder einen Button
2. Tipp: platziere den Wert der noch abzuzählenden Sekunden extern, entweder in einem Feld (Countdown) oder als Property z.B. der Karte
Jetzt könntest Du über den hilite-Status eines Buttons bestimmen, ob der Countdown läuft und wenn ja, wie lange noch (=> externer Wert ist Einstieg in Schleife).
Happy Coding
Torsten -
März 22, 2021 um 16:15 Uhr #27251
Hier ist ein schöner Artikel mit vielen Varianten, wie man Timer einsetzt: https://hub.packtpub.com/livecode-loops-and-timers/
Happy Coding
Torsten -
März 23, 2021 um 17:09 Uhr #27266
Hallo Gertie,
was Torsten sagt mit „… with messages“!
Aber Dein LOOP ist in ein paar Sekunden abgearbeitet und nicht in 120 Sekunden!
Dein „blenden“ dauert jeweils 200 Millisekunden, das mal 120 ergibt ca. 2400 ms = 2,4 Sekunden, der Rest des Skriptes wird extrem schnell abgearbeitet, so daß alles in allem nur ca. maximal 3 Sekunden dauern sollte.Du musst auch hier irgendwo ein „WAIT XXX XXX with messages“ einbauen!
Gruß
Klaus
@Torsten -> BACKSPACE Problem! -
März 24, 2021 um 20:07 Uhr #27293
Die Schleife läuft schon 2 Minuten. Die App sieht so aus, dass ich 12 Kuchenstücke für je 10 Sekunden nach und nach einblende. Innerhalb dieser 10 Sekunden blinkt das neue Kuchenstück. Das ist die ‚blenden‘ Subroutine.
Das aus und einblenden dauert 2 Sekunden und nach jedem Durchlauf wird der Timer hochgezählt.
Aber inzwischen bin ich von diesem Konzept schon wieder ab, das Blinken macht ganz kirre.
Den Tipp mit dem wait x seconds with messages verstehe ich nicht so recht. Mein ganzer Timer soll ja weiterlaufen. Ich will ihn nur anhalten können
LG
Gerti -
März 24, 2021 um 20:13 Uhr #27294
Hab mir gerade den Linktipp angeschaut. Ich glaube mein timerproblem ist gelöst.
-
März 25, 2021 um 20:30 Uhr #27307
Hi Gerti,
Die Schleife läuft schon 2 Minuten.
OK, dann wollen wir dir das mal glauben. 🙂
Aber noch ein paar Tips:
1. Dein „blenden“ Handler ist sehr optimistisch mit der Zeitangabe von 0,1 Millisekunden!
Laut Deinem Handler sollte das Ein- bzw. Ausblenden knapp 10 Millisekunden (100*0,1) dauern.
Das ist unmöglich, und selbst wenn doch, so schnell kann niemand gucken! 😎
Ich habe das hier mal nachgestellt, die beste Zeit auf meinem MacMini war 200 Millisekunden pro Durchgang, also insgesamt knapp 400 Millisekunden fürs Ein- und Ausblenden.Daher solltest du überlegen, ob du den Button nicht einfach versteckst und wieder anzeigst:
on blenden show button "Sonnebild" wait 100 millisecs with messages hide button "Sonnebild" end blenden
2. Mit einem REPEAT Loops ist es extrem kompliziert einen Timer anzuhalten und fortzusetzen.
Besser ist es mit „SEND“.
Aber ich sehe, Du hast Dich schon über TIMER schlau gemacht.Gruß
Klaus
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.