Seite 1 von 1

SpriteAnimation - Frames Skippen ?

Verfasst: 10.04.2014 00:19
von True29
Hallo ,
leider komme ich nich weiter und brauch eure Hilfe.
Geht darum , ich habe eine Animation von 50 Frames.
Diese Läuft wunder bar.
in \frame wird der aktuelle Frame gespeichert/berechnet.
ClipSprite clippt dann den korrekten Frame aus der Spritemap.

Nun hätte ich gerne das ganze so angepasst , das is ein Start und ein Stop -Frame setzen kann und er nur hier zwichen die Bilder anzeigt.
Beispiel: Frame 0-25 nur das erste mal , Frame 25-50 ab nun in Schleife

ps:
Die erste welche ich hatte , war das ganze in 2 Animationen zu teilen , nur sieht man hier einen kleinen übergang :( und das soll schon wie ein Video aussehen.

Hier mein Code mit der einfachen Anzeige.

Code: Alles auswählen

ForEach Animations()           
        With Animations()    
       
            \frame = ((time - \startTime)/\frameDuration)%\frames                                                                                                                        
            ClipSprite(\sprite,Mod(\frame,\framesPerRow)*\frameWidth,Int(\frame/\framesPerRow)*\frameHeight,\frameWidth,\frameHeight)                                
            DisplaySprite(\sprite,\x,\y)                                                                                                                                                                

        EndWith          
      Next  
Hoffe das ihr einen Vorschlag ohne Funktionsfähigen Code habt :(
Wäre dankbar für hilfe ;)

Re: SpriteAnimation - Frames Skippen ?

Verfasst: 10.04.2014 06:48
von Danilo
True29 hat geschrieben:Nun hätte ich gerne das ganze so angepasst , das is ein Start und ein Stop -Frame setzen kann und er nur hier zwichen die Bilder anzeigt.
Beispiel: Frame 0-25 nur das erste mal , Frame 25-50 ab nun in Schleife
Schreibe es doch so, wie Du es gesagt hast.

Code: Alles auswählen

ForEach Animations()
        With Animations()

            \frame = ((time - \startTime)/\frameDuration)%\frames

            Wenn \inLoop = #False Und \frame >= \loopStartFrame ; nach erstem erreichen von \loopStartFrame
                \inLoop = #True                                 ; in den Loop-Modus schalten
            EndeWenn

            Wenn \inLoop = #True                                ; Wenn im Loop-Modus, dann
                Wenn \frame > \loopEndFrame                     ; prüfen ob sich \frame innerhalb
                    \frame = \loopStartFrame                    ; \loopStartFrame und \loopEndFrame
                AndernfallsWenn \frame < \loopStartFrame       ; befindet
                    \frame = \loopStartFrame
                EndeWenn
            EndeWenn

            ClipSprite(\sprite,Mod(\frame,\framesPerRow)*\frameWidth,Int(\frame/\framesPerRow)*\frameHeight,\frameWidth,\frameHeight)
            DisplaySprite(\sprite,\x,\y)

        EndWith
Next
Oder vielleicht:

Code: Alles auswählen

ForEach Animations()
        With Animations()

            \frame = ((time - \startTime)/\frameDuration)%\frames

            Wenn \inLoop = #False Und \frame >= \loopStartFrame       ; nach erstem erreichen von \loopStartFrame
                \inLoop = #True                                       ; in den Loop-Modus schalten,
                \frames = \loopEndFrame - \loopStartFrame             ; \frames neu berechnen (Anzahl)
                \frame = ((time - \startTime)/\frameDuration)%\frames ; und einmal neu berechnen
            EndeWenn

            Wenn \inLoop = #True                                      ; Wenn im Loop-Modus, dann
                \frame + \loopStartFrame                              ; von \loopStartFrame anfangen
            EndeWenn

            ClipSprite(\sprite,Mod(\frame,\framesPerRow)*\frameWidth,Int(\frame/\framesPerRow)*\frameHeight,\frameWidth,\frameHeight)
            DisplaySprite(\sprite,\x,\y)

        EndWith
Next

Re: SpriteAnimation - Frames Skippen ?

Verfasst: 10.04.2014 09:06
von True29
danke ,
werde ich dann testen ;)

Re: SpriteAnimation - Frames Skippen ?

Verfasst: 10.04.2014 11:32
von True29
so danke , Danilo ;)
funktioniert perfekt.

Grüße