Dobro a écrit :elle ne vous plaisent pas mes 2 fonctions ?
Je viens de tester, elles sont excellentes, merci

.
Par contre, au lieu d'utiliser un delai = 60, ce serait mieux de régler ça dans la fonction animation (même un fps pour chaque animation, avec un fps de base à 60 par exemple.
Par exemple un fps de 30 irait 2 fois plus vite et un fps de 120 irait 2 fois moins

.
J'ai essayé ça, mais le fps qui est pris en compte est celui le plus bas, je ne sais pas pourquoi :
Code : Tout sélectionner
;***********************************************
;Titre :*Sprite Animé
;Auteur : Dobro
;Date :11/03/2014
;Heure :19:54:21
;Version Purebasic : PureBasic 5.20 LTS (Windows - x86)
;Version de l'editeur :EPB V2.54
; Libairies necessaire : Aucune
;***********************************************
UsePNGImageDecoder()
Declare LoadSprite2(id.l, file_name.s, taille_x, taille_y, nb_frame_par_line,nbr_ligne)
Declare Anim_sprite(id.l,num_ligne,x_spr,y_spr, fps=60)
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
Enumeration 1
#Bird
EndEnumeration
OpenWindow(0, 0, 0, 800, 600, "2D Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
;LoadSprite(1, #PB_Compiler_Home+"examples\sources\data\Geebee2.bmp")
; je charge la planche de sprite
taille_x=64 ; la taille des cellule
taille_y=64; la taille des cellule
nbr_frame_par_line=4 ; il y a 4 image 64x64 par ligne
nbr_ligne=4 ; il y a 4 lignes
File_name.s="bird.png" ; le chemin de la planche
LoadSprite2(#bird, File_name.s, taille_x, taille_y, nbr_frame_par_line, nbr_ligne)
;TransparentSpriteColor(#bird, RGB(255, 255, 255))
Repeat
WindowEvent()
ExamineKeyboard()
ExamineMouse()
ClearScreen(RGB(0,0,0))
Anim_sprite(#bird,0,100,100, 100) ; ici j'affiche la premiere ligne de la planche
Anim_sprite(#bird,1,200,100) ; ici j'affiche la Deuxieme ligne de la planche
Anim_sprite(#bird,2,300,100, 20) ; ici j'affiche la troisieme ligne de la planche
Anim_sprite(#bird,3,400,100, 35) ; ici j'affiche la 4em ligne de la planche
Delay(1) ; je ralenti car chez moi c'est trop rapide LOL
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Error", "Can't open a 800*600 - 32 bit screen !", 0)
EndIf
End
; *************** zone procedure **********************
Procedure LoadSprite2(id.l, file_name.s, taille_x, taille_y, nbr_frame_par_line,nbr_ligne)
; by Dobro
Structure Spr
id.l
x.l
y.l
taille_x.l
taille_y.l
nbr_frame_par_line.l
nbr_ligne.l
EndStructure
Global Spr.Spr
spr\id.l=id.l
spr\taille_x.l=taille_x
spr\taille_y.l=taille_y
spr\nbr_frame_par_line.l=nbr_frame_par_line
spr\nbr_ligne.l=nbr_ligne
LoadSprite(id.l,file_name.s,#PB_Sprite_AlphaBlending)
EndProcedure
Procedure Anim_sprite(id.l, num_ligne, x_spr, y_spr, fps=60)
; by Dobro
Static x, compteur, fps_max
If fps_max >= fps
fps_max = 0
compteur = compteur+1
x = x + spr\taille_x.l
Else
fps_max = fps_max +1
EndIf
If compteur => spr\nbr_frame_par_line.l
compteur = 1
x = 0
EndIf
y = num_ligne * spr\taille_y.l
;ClipSprite(spr\idl,#PB_Default ,#PB_Default ,#PB_Default ,#PB_Default )
ClipSprite(spr\id.l, x, y, spr\taille_x.l, spr\taille_y.l)
DisplayTransparentSprite(id.l, x_spr, y_spr)
EndProcedure
; Epb