Comme cela un coup de
et tu affiches l'animation vouluedisplayAnimationSprite(Birdie,"fly left",100,100)

Facile à amélioré en plus

Code : Tout sélectionner
Structure vector2i
x.i
y.i
EndStructure
Structure rectangle
A.vector2i ; min
B.vector2i ; size
EndStructure
Structure animation
animSpeed.l
animTimer.i
currentFrame.l
List region.rectangle()
EndStructure
Structure animSprite
atlasTexture.l
cellWidth.l
cellHeight.l
Map animation.animation()
EndStructure
Procedure.i LoadAnimSprite(name.s, cellWidth.l, cellHeight.l, spriteMode.l = 0)
*a.animSprite = AllocateMemory(SizeOf(animSprite))
If *a
InitializeStructure(*a,animSprite)
*a\atlasTexture = LoadSprite(#PB_Any,name,spriteMode)
*a\cellWidth = cellWidth
*a\cellHeight = cellHeight
If Not *a\atlasTexture
FreeMemory(*a)
ProcedureReturn #Null
EndIf
ProcedureReturn *a
EndIf
ProcedureReturn #Null
EndProcedure
Procedure setAnimationFrame(*spr.animSprite, name.s, cellX.l, cellY.l)
If *spr
AddElement( *spr\animation(name)\region() )
*spr\animation(name)\region()\A\x = cellX * *spr\cellWidth
*spr\animation(name)\region()\A\y = cellY * *spr\cellHeight
*spr\animation(name)\region()\B\x = *spr\cellWidth
*spr\animation(name)\region()\B\y = *spr\cellHeight
EndIf
EndProcedure
Procedure setAnimationSpeed(*spr.animSprite, name.s, speed.i)
If *spr
*spr\animation(name)\animSpeed = speed
EndIf
EndProcedure
Procedure displayAnimationSprite(*spr.animSprite, name.s, x.f, y.f)
If *spr
*rect.rectangle = @*spr\animation(name)\region()
If *spr\animation(name)\animTimer < ElapsedMilliseconds()
*spr\animation(name)\animTimer = ElapsedMilliseconds() + *spr\animation(name)\animSpeed
If NextElement(*spr\animation(name)\region()) = 0
FirstElement(*spr\animation(name)\region())
EndIf
EndIf
ClipSprite(*spr\atlasTexture,*rect\A\x, *rect\A\y, *rect\B\x, *rect\B\y)
DisplayTransparentSprite(*spr\atlasTexture,x,y)
EndIf
EndProcedure
;
;-TEST
;
InitSprite()
OpenWindow(0,0,0,800,600,"")
OpenWindowedScreen(WindowID(0),0,0,800,600)
UsePNGImageDecoder()
Birdie = LoadAnimSprite("./bird.png",64,64,#PB_Sprite_AlphaBlending)
setAnimationFrame(Birdie,"fly left",0,0)
setAnimationFrame(Birdie,"fly left",1,0)
setAnimationFrame(Birdie,"fly left",2,0)
setAnimationFrame(Birdie,"fly left",3,0)
setAnimationSpeed(Birdie,"fly left",50)
setAnimationFrame(Birdie,"fly right",0,1)
setAnimationFrame(Birdie,"fly right",1,1)
setAnimationFrame(Birdie,"fly right",2,1)
setAnimationFrame(Birdie,"fly right",3,1)
setAnimationSpeed(Birdie,"fly right",50)
While 1
event = WindowEvent()
If event = #PB_Event_CloseWindow
Break
EndIf
ClearScreen(0)
displayAnimationSprite(Birdie,"fly left",100,100)
displayAnimationSprite(Birdie,"fly right",200,200)
FlipBuffers()
Wend