Animation Sprite.... Simple!

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Animation Sprite.... Simple!

Message par Neveware »

Bonjour à tous!

Je viens aujourd'hui vous proposer mon premier "Truc" ou ma première "Astuce" si vous préférez ^^.

Je tiens aussi que j'ai débuté le PureBasic il y 'a 6 jours.... Donc ne soyez pas indulgents mais toute remarque positive est acceptée :wink:

Voilà le Code :

Code : Tout sélectionner

 Vitesse_Animation = 250; (En Millisecondes, soit 5000 = 5 secondes)
 
  If Temps_Animation_Sprite < ElapsedMilliseconds() 
  
          Temps_Animation_Sprite  = ElapsedMilliseconds() + Vitesse_Animation
          Sprite_index + 1
    
  EndIf
  
  If  Sprite_index > 2 ; Si le nombre de Sprites dans l'animation est dépassé...
  
          Sprite_index = 0 ; On retombe à 0
  
  EndIf
  
  If Sprite_index = 0 ; Affichage du Sprite n°1 De l'animation
  
      DisplaySprite(1, 0, 0)
    
    ElseIf Sprite_index = 1 ; Affichage du Sprite n°2 De l'animation
    
      DisplaySprite(2, 0, 0)
    
    ElseIf Sprite_index = 2 ; Affichage du Sprite n°3 De l'animation
    
      DisplaySprite(3, 0, 0)

    EndIf
J'ai remarqué en débutant la 2D : Je me suis posé beaucoup de questions... Comment faire ci? Comment faire ça ?
Et bien pour les Animations, j'ai passé du temps dessus, et je sait que sa pourra être utile pour les nouveaux qui débutent en 2D....

Sachez que sa peut être particulièrement Utile concernant les RPG (les déplacements du personnage, etc...)

Voilà, j'espère aider pas mal de nouveaux :)

Si vous avez des remarques, ou des suggestions pour optimiser le code mais en le laissant "Simple de compréhension" (car quand on débute, c'est pas toujours facile de comprendre :s).

Voilà, excellente soirée à tous!

Cordialement,

Neveware.
Dernière modification par Neveware le lun. 22/sept./2008 18:24, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

......
Dernière modification par Backup le mar. 19/août/2014 12:43, modifié 1 fois.
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

Bon je me répète... C'EST POUR DEBUTANTS et il faut quelque chose de COMPREHENSIBLE !!!

Excuse-moi, mais... Un débutant qui s'intéresse à la 2D et qui viens de découvrir les sprites et qui s'intéresse comment animer un sprite .... Je doute qu'il sache déjà ce qu'est sa :

Code : Tout sélectionner

         startdrawing   (   screenoutput   ())
            couleur = point (nous(0)\X-2, nous(0)\Y-5)
            Couleur2 = point (nous(0)\X+32, nous(0)\Y-5)
            Couleur3 = point (nous(0)\X+64, nous(0)\Y-5)
             ; Plot(nous(0)\x-2, nous(0)\y-5,RGB($4F,$AF,$FF)) ; sert a verifier les points de test de collisions
             ; Plot(nous(0)\x+32, nous(0)\y-5,RGB($4F,$AF,$FF))
             ; Plot(nous(0)\x+64, nous(0)\y-5,RGB($4F,$AF,$FF))
            ref1= rgb ($4E,$A5,$FC)
            ref2= rgb ($1,$74,$B1)
             If couleur=ref1 Or couleur=ref2 Or Couleur2=ref1 Or Couleur2=ref2
                  collision=1
                   point =0
                  couleur=0:Couleur2=0
             EndIf
             If Couleur3=ref1 Or Couleur3=ref2
                  collision=2
                   point =0
                  Couleur3=0
             EndIf
       stopdrawing () 
Je sait pas, tu codes très bien c'est sûr, mais on sait pas tous ce que sa veux dire, je le sait je suis Programmeur PHP depuis 4 ans, j'ai pas de souçis, mais si je donne un code à "ma manière", le pauvre il va rien comprendre, seul les habitués comprendront, ce que j'essaye de te dire, c'est que j'essaye de donner un bout de code pour pas "embrouiller" le débutant et lui montrer une façon simple d'animer un Sprite!

Cordialement,

Neveware.


EDIT : Et il est vrai que j'aurais du poster le Code entier par contre, je le reconnaît ^^
Anonyme

Message par Anonyme »

Cpl.Bator a écrit :T'es excusé , une solution consiste à utilisé le temps pour afficher une serie d'image ou sprite pour avoir une animation

j'ai viré la partie graphique pour que tu comprennes le principe du temps

Index est le numéro de sprite à afficher. il va de 0 à 9 , en admettant qu'il y a 10 images a afficher...

si ton sprite à le numéro 112 , et que le reste de l'anim va jusqu'a 122 , ta juste à additionné 112+Index.

Code : Tout sélectionner

OpenConsole()
EnableGraphicalConsole(1)

Vitesse_Animation = 250 ; Vitesse de l'animation , en millisecondes

Repeat

; Controle du temps par rapport au timing processeur.
If Animation_Temps < ElapsedMilliseconds() 
  Animation_Temps  = ElapsedMilliseconds() + Vitesse_Animation 
  Index + 1
  ClearConsole()
EndIf 

; les index vont de 0 à 9
If Index>9 : index=0 : EndIf 



ConsoleLocate(0,0)
PrintN("Frame = "+Str(Index))


ForEver
Neveware a écrit :Et bien pour les Animations, j'ai passé du temps dessus, et je sait que sa pourra être utile pour les nouveaux qui débutent en 2D....
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Animation Sprite.... Simple!

Message par blendman »

salut

pour éviter de recréer un nième sujet sur ça, je me permets de poster un code complet qui fonctionne, pour les débutants (comme moi). J'ai juste repris le code ce sujet, mais j'ai ajouté les quelques lignes qui manquaient (initialisation, constantes, openwindow, etc..)

Attention, il n'y a pas les sprites, vous choisissez vos propres sprites pour cela. Dans cet exemple, j'ai utilisé 6 sprites pour cette animation. Mais vous pouvez changer ce nombre bien entendu.

Chaque sprite doit être un .png séparé, avec si possible un canal alpha si vous le voulez..

Code : Tout sélectionner

;{ **************** variable, constantes.****************** ..
;Eléments Windows
Enumeration
  #WINDOW_MAIN
EndEnumeration

;Les sprites
Enumeration
  #perso1 
  #perso2
  #perso3
  #perso4
  #perso5
  #perso6
EndEnumeration

;variable général : taille de la vue, de la map (room), etc..
Global room_width = 4000
Global room_height  = 3000 
Global ecranX = 1024
Global ecranY = 768
Global FPS_LIMIT = 120
Global quit = 0
Global CheckTime 

Global Vitesse_Animation = 100; (En Millisecondes, soit 5000 = 5 secondes)
;}


;{ initialisation
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
UsePNGImageDecoder()
;}


Procedure evenement() 
; on regarde si on appuie sur la touche échappe, pour fermer le jeu. 
;Mais on peut ajouter des touche pour déplacer le personnage
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
      quit = 1
    EndIf
  EndProcedure


;{ ********************** openWindow ************************ 
 
OpenWindow(#WINDOW_MAIN,150,150,EcranX,EcranY,"3 Arks - test - "+Str(CheckTime),#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(#WINDOW_MAIN),0,0,EcranX,EcranY,0,0,0,#PB_Screen_WaitSynchronization ) 
 
;}


;{ ********************** Loading ************************ 
; ici on loade les sprites
For i=1 To 6
LoadSprite(i, "perso"+Str(i)+".png",#PB_Sprite_AlphaBlending|#PB_Sprite_Texture )
CreateSprite3D(i,i)
Next i

;}

;{********************* la boucle principale *********************
Repeat

  evenement()
  Event.l = WindowEvent()
  
  If (ElapsedMilliseconds() > CheckTime + 1000 / FPS_LIMIT)
    CheckTime = ElapsedMilliseconds()
    FlipBuffers()
    ClearScreen(RGB(128,128,128))
    
  If Temps_Animation_Sprite < ElapsedMilliseconds() 
          Temps_Animation_Sprite  = ElapsedMilliseconds() + Vitesse_Animation
          If Sprite_index < 6 ; si on 6 sprites dans notre animation
            Sprite_index + 1
          Else 
            Sprite_index = 1
          EndIf
   
  EndIf
; on affiche l'image du sprite souhaitée (sprite_index) 
Start3D()
DisplaySprite3D(Sprite_index, 0, 0)
Stop3D()
Else
    Delay(1)
  EndIf
Until Event = #PB_Event_CloseWindow Or quit = 1
;}
j'espère que cela sera utile aux débutants comme ce sujet m'a été utile ;).
Répondre