geichzeitiges ändern der Höhe von 2 Images

Startseite Foren Deutsches LiveCode-Forum geichzeitiges ändern der Höhe von 2 Images

Schlagwörter: 

Ansicht von 9 Antwort-Themen
  • Autor
    Beiträge
    • #44378
      akrages
      Teilnehmer

        Hallo und guten Abend.

        Ich habe 2 Images (.png) deren Höhe sich auf Klick eines Buttons gleichzeitig und sichtbar
        ändern soll.
        Dazu habe ich folgendes Script geschrieben:

        local myVar1, myVar2, tPosition1, tPosition2
        
        on mouseUp
           //if the height of image "Line-magenta" = 1 then
           put the height of image "Line-magenta" into myVar1
           put the height of image "Line-green" into myVar2
           put 1 into tPosition1
           put 1 into tPosition2
           
           ##lock screen
           resizeImage1 the long id of img "Line-magenta"
           wait 1 milliseconds with messages
           resizeImage2 the long id of img "Line-green"
           ##unlock screen
           //end if
        end mouseUp
        
        on resizeImage1 theImg
           put the bottom of theImg into tBalkenUnten
           if tPosition1 < myVar1 then put 1 into myVar1
           repeat until myVar1 > tPosition1
              set the height of theImg to myVar1
              wait 15 milliseconds with messages
              add 1 to myVar1
              set the bottom of theImg to tBalkenUnten
           end repeat
        end resizeImage1 theImg
        
        on resizeImage2 theImg
           put the bottom of theImg into tBalkenUnten
           if tPosition2 < myVar2 then put 1 into myVar2
           repeat until myVar2 > tPosition2
              set the height of theImg to myVar2
              wait 15 milliseconds with messages
              add 1 to myVar2
              set the bottom of theImg to tBalkenUnten
           end repeat
        end resizeImage2 theImg

        Das Problem ist, dass sich zuerst img „Line-magenta“ in der Höhe ändert und
        danach img „Line-green“.

        Wie erreiche ich, dass sich img „Line-magenta“ und img „Line-green“ gleichzeitig in der Höhe ändern?

      • #44472
        Torsten
        Teilnehmer

          Hi akrages,

          dein Code funktioniert bei mir gar nicht, die Images schrumpfen und bleiben klein.
          Ich vermute, dass sich zwei Balken gleichzeitig in der Höhe animiert verändern sollen, z.B. als „wachsende“ Balken. In der jetzigen Form wächst aber erst der eine komplett und dann der andere, es muss also komplett anders gemacht werden.

          Da ich das Problem sehr interessant fand, habe ich etwas dran gearbeitet:

          
          
          on mouseup
             
             ## Zurücksetzen der Variablen für zu vergrößernden und die bereits vergrößerten Objekte
             
             put empty into tObjects
             put empty into tMaxsizedObjectsList
             
             ## Einstellen der Verzögerung der Animationsschritte
             
             put 3 into tMilliWaits
             
             ## Stelle die Liste der zu animierenden Objekte und ihrer Endgröße zusammen 
             -- Hier ist die Stelle, an der beliebig viele Objekte (können auch Grafiken, Buttons etc. sein)
             -- angelegt werden, um sie später alle gleichzeigig zu animieren
             -- durch die Angabe als log id sind alle Objekttypen möglich.
             
             put the long id of graphic "green" & tab & 100 & cr after tObjects
             put the long id of graphic "yellow" & tab & 200 & cr after tObjects
             put the long id of graphic "red" & tab & 300 & cr after tObjects
             
             
             ## Zurücksetzen der bisherige Objekte auf Größe 1
             
             repeat for each line tObjectData in tObjects
                
                put 20 into tMinSize
                set itemdelimiter to tab
                put item 1 of tObjectData into tObject
                put the bottom of tObject into tBottom
                set the height of tObject to tMinSize
                set the bottom of tObject to tBottom
                
             end repeat
             
             ## Wiederhole solange, bis alle Objekte bis zu ihrem zugewiesenen Größe vergrößert wurden
             
             repeat
                
                ## Wiederhole für jedes Objekt in der Liste
                
                repeat for each line tObjectData in tObjects
                   
                   set itemdelimiter to tab
                   put item 1 of tObjectData into tObject
                   put item 2 of tObjectData into tMaxSize
                   
                   ## Verstecke das Vergrößern, um dne Eindruck zu erwecken, dass sich alle Objekte gleichzeig verändern
                   
                   lock screen
                   
                   ## Verändere die Größe es Objekts, falls es noch nicht fertig vergrößert ist
                   
                   if tObject is not in tMaxsizedObjectsList then
                      
                      put changeHeight(tObject,tMaxSize) into tResult
                      
                      ## Setze das Objekt auf die Liste der bereits feertig vergrößerten Objekte, wenn es "Finished" zurückmeldet
                      
                      if tResult = "Finished" then 
                         put tObject & cr after tMaxsizedObjectsList
                      end if
                   end if
                   
                   unlock screen
                   
                   wait tMilliWaits milliseconds with messages
                   
                end repeat
                
                if the number of lines in tMaxsizedObjectsList = the number of lines in tObjects then 
                   exit repeat
                end if
                
             end repeat
             
          end mouseup
          
          --------------------------------------------------
          
          function changeHeight pObject,pMaxHeight
             
             put the height of pObject into tCurrentHeight
             put the bottom of pObject into tObjectBottom
             
             if tCurrentHeight < pMaxHeight then
                add 1 to tCurrentHeight
                set the height of pObject to tCurrentHeight
                set the bottom of pObject to tObjectBottom
             else
                return "Finished"
             end if
             
          end changeHeight
          
          --------------------------------------------------
          

          Der Code geht in einen Button und auf der Karte erwarte ich drei Grafik-Objekte, die grün, gelb und rot sind.

          Und so sieht es dann aus:
          https://www.dropbox.com/s/nzo3mr9hseaz0hk/Paralleles-Wachsen.mov?dl=0

          Happy Coding
          Torsten

        • #44491
          akrages
          Teilnehmer

            Hi Torsten,

            Warum mein Skript bei Dir nicht funzt verstehe ich nicht.

            Vielen Dank für dein Skript.
            Es funktioniert nach einer kleinen Anpassung sehr gut.
            Bis auf folgendes:
            Die Graphiken bzw. Images stehen für ein Balkendiagramm. Darum ist es wichtig, dass diese -wenn sich die Werte erhöhen- nicht jedesmal bei 0 mit dem „wachsen“ beginnen, sondern bei ihrem momentanen Wert weiterwachsen. Verstehst Du was ich meine?

            In meinem Script hatte ich dazu diese Anweisung:

               put the height of image "Line-magenta" into myVar1
               put the height of image "Line-green" into myVar2

            Wie kann ich dein Skript dahingehend anassen?

          • #44493
            akrages
            Teilnehmer

              Sorry, wer lesen kann ist klar im Vorteil!

              Habs gerade selbst herausgefunden.

            • #44501
              Torsten
              Teilnehmer

                Spitze!

                Viel Spass noch beim Coden
                Torsten

              • #44540
                Torsten
                Teilnehmer

                  Hallo Gemeinde,

                  ich habe die voherige changeHeight-Funktion so geschrieben, dass sie nur eine Änderung macht, wenn die neue Höhe größer als die bisherige ist. Man kann sich aber leicht vorstellen, dass sich Zahlen auch nach unten ändern können und das Objekt dann schrumpfen muss.
                  Deswegen hier eine Version, welche die Größe des Objekts je nach Zielgröße um einen Pixel nach oben oder unten verändert.

                  function changeHeight pObject,pFinalHeight
                     
                     put the height of pObject into tCurrentHeight
                     put the bottom of pObject into tObjectBottom
                     
                     if tCurrentHeight < pFinalHeight then
                        add 1 to tCurrentHeight
                     else if tCurrentHeight > pFinalHeight then
                        subtract 1 from tCurrentHeight
                     else
                        return "Finished"
                     end if
                     
                     set the height of pObject to tCurrentHeight
                     set the bottom of pObject to tObjectBottom
                     
                  end changeHeight
                  

                  Happy Coding
                  Torsten

                • #44595
                  akrages
                  Teilnehmer

                    Hallo Torsten.

                    Ich habe deine letzte changeHeight-Funktion geich mal ausprobiert.
                    Dabei habe ich festgestellt, dass sie nur mit positiven Ganzzahlen funktioniert.
                    d.h.

                       put the long id of graphic "green" & tab & 1.2345 & cr after tObjects
                       put the long id of graphic "yellow" & tab & 2.6789 & cr after tObjects
                       put the long id of graphic "red" & tab & 0 & cr after tObjects

                    bringt die IDE dazu, dass sie sich aufhängt bzw. einfriert.
                    Der Editor reagiert dann nicht mehr und auch ein sauberes beenden der Anwendung ist nicht mögich.
                    Nur ein „abschießen“ von Livecode über den Taskmanager ist dann die Rettung.

                    Mein Lösungsansatz:
                    Da meine App Werte mit Kommazahlen (lasse ich natürlich durch punkt ersetzen) generiert,
                    lasse ich diese Werte zunächst auf- bzw. abrunden.
                    Und die Tage, die in der Zukunft liegen -also noch keine Werte enthalten- fange ich z.B. mit:

                    If tPositionPicksMit1 >0 then
                    und
                    If tPositionPicksDon1 >0 then

                    etc. ab. Da mein Balkendiagramm die ganze Woche anzeigt bedeutet dies, dass ich die „If-Abfrage“ für jeden Tag der Woche stellen muss.

                    Es müsste doch aber auch einfacher gehen.!?!
                    Ich habe schon einiges probiert, aber leider noch nicht die richtige Stelle in deinem Script gefunden.
                    Wo müsste ich die Abfrage nach positiven Werten in deinem Skript einfügen?

                  • #44648
                    Torsten
                    Teilnehmer

                      Das einfachste ist, nur positive Zahlen an die Balken zu schicken 🙂
                      Ich weiss jetzt nicht genug über dein Programm, um den besten Weg zu erkunden. Wenn Du magst, schick einfach den Stack an mich: torsten.holmer AT web.de

                      Happy Coding
                      Torsten

                    • #44674
                      akrages
                      Teilnehmer

                        Stimmt!
                        Jetzt läuft alles genau so, wie es soll.
                        Vielen Dank und ein großes Lob für deine Hilfe. Das gleiche geht an Klaus Major.
                        Wenn einmal etwas klemmt und man nicht weiter weiß, dann seid ihr beiden immer zur Stelle.

                        Gruß

                        akrages

                      • #44676
                        Klaus Major
                        Administrator

                          Stets zu Diensten! 🙂

                          Ich war eine Woche weg, daher habe ich den Fred jetzt erst gesehen.
                          Schön, daß Du es hinbekommen hast!

                          Bitte auch das funktionierende Skript posten, danke!

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