Repeat Schleife unterbrechen

Startseite Foren Deutsches LiveCode-Forum Repeat Schleife unterbrechen

Ansicht von 9 Antwort-Themen
  • Autor
    Beiträge
    • #27229
      Gerti08
      Teilnehmer

        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

      • #27231
        Klaus Major
        Administrator

          Bitte zeig uns Dein Skript mit dem Loop.

        • #27233
          Gerti08
          Teilnehmer
            
            
            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
            
          • #27236
            Gerti08
            Teilnehmer

              Hat etwas gedauert, bis ich wieder wusste, wie man das Einrücken beibehält :o)

            • #27237
              Torsten
              Teilnehmer

                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

              • #27251
                Torsten
                Teilnehmer

                  Hier ist ein schöner Artikel mit vielen Varianten, wie man Timer einsetzt: https://hub.packtpub.com/livecode-loops-and-timers/

                  Happy Coding
                  Torsten

                • #27266
                  Klaus Major
                  Administrator

                    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!

                  • #27293
                    Gerti08
                    Teilnehmer

                      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

                    • #27294
                      Gerti08
                      Teilnehmer

                        Hab mir gerade den Linktipp angeschaut. Ich glaube mein timerproblem ist gelöst.

                      • #27307
                        Klaus Major
                        Administrator

                          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

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