SpriteAnimation - Frames Skippen ?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

SpriteAnimation - Frames Skippen ?

Beitrag 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 ;)
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: SpriteAnimation - Frames Skippen ?

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: SpriteAnimation - Frames Skippen ?

Beitrag von True29 »

danke ,
werde ich dann testen ;)
i7,12gb ram , Windows 10 ,Purebasic 5.50
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: SpriteAnimation - Frames Skippen ?

Beitrag von True29 »

so danke , Danilo ;)
funktioniert perfekt.

Grüße
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten