
Essayez ce code et observez les arbres... ils devraient bouger tous au même rythme ( a savoir un sprite toute les 700 boucles...)

Quelqu'un a t il une explication ???!!!


peut etre en utilisant les timers ?Fig a écrit :J'ai commencé un jeu en 3D isometrique, j'ai un problème avec les animations... Elles ne se jouent pas à la même vitesse en fonction de l'emplacement sur la carte (ou en fonction d'autre chose, je n'arrive pas a determiner quoi).![]()
Essayez ce code et observez les arbres... ils devraient bouger tous au même rythme ( a savoir un sprite toute les 700 boucles...)![]()
Quelqu'un a t il une explication ???!!!![]()
http://fig77.free.fr/test.zip
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
Debug "--------------------1 seconde"
; Ici, le code à executer toutes les secondes
Case 2
Debug "0.2 secondes"
; Ici, le code à executer toutes les 200 millisecondes
Case 3
Debug "-------------------------------------------3 secondes"
; Ici, le code à executer toutes les 3 secondes
EndSelect
EndSelect
EndProcedure
If OpenWindow (0, 100, 100, 100, 100, #PB_Window_SystemMenu , "" )
Handle = WindowID (0)
SetTimer_ (Handle, 1, 1000, @TimerProc()) ; envoie un evenement toutes les 1000 millisecondes
SetTimer_ (Handle, 2, 200, @TimerProc()) ; envoie un evenement toutes les 200 millisecondes
SetTimer_ (Handle, 3, 3000, @TimerProc()) ; envoie un evenement toutes les 3000 millisecondes
Repeat
Until WaitWindowEvent () = #PB_Event_CloseWindow
EndIf
Code : Tout sélectionner
#AnimArbre=10
Anim=#AnimArbre
if ElapsedMilliseconds()>NextImagetImage(Anim) ; Si le temps est écoulé
Image(Anim)=Image(Anim)+1 ;On incrémente l'animation
NextImagetImage(Anim)=ElapsedMilliseconds()+100 ;on initialise le compteur pour la prochaine image (au lieu de 100 on peut avoir une variable pour avoir une durée différente pour chaque image)
if Image(Anim)>ImageMax(Anim) ; si on est arrivé a la fin de l'animation
Image(Anim)=1 ; on revient au debut
endif
endif
DisplaySprite(ImagetoSprite(Anim,Image(Anim)),x,y)
De rien c'est pas grand chose...Fig a écrit :OK, Thyphoon je vais adopter cette solution je pense.
Mais je ne comprend toujours pas d'où viens le problème.
Merci à tous deux
Code : Tout sélectionner
If affichage(e)\perso>#nbelement
If ElapsedMilliseconds()>tempo:arbre(affichage(e)\perso-#nbelement)\spritecourant+1:tempo=ElapsedMilliseconds()+200:EndIf
arbre(affichage(e)\perso-#nbelement)\spritecourant & %11111111111111111111111111110111
DisplayTransparentSprite(arbre(affichage(e)\perso-#nbelement)\spritecourant,TileposX-25,TileposY-170);affiche arbre
EndIf
EndIf