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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.