2D sprite animation
Re: 2D sprite animation
Salut Falsam
Je suis plutôt d'accord avec toi concernant les fonctions d'animation de sprite, mais d'une manière générale, je me demande si Fred ne doit pas se concentrer sur d'autres fonctions qu'on ne peut pas coder soi-même.
Car même si ce serait beaucoup mieux des fonctions natives pour l'animation de sprites, les particules ou la physique (pour le jeu ou pour des applications), on peut faire tout ça tout seul .
Par contre, il y a d'autres choses qu'on ne peut pas faire soi-même, comme la gestion de shaders (pour la 2D), dessiner sur un sprite (ou le render to texture pour la 2D), l'ajout de nouveaux gadgets (dockable par exemple, propertie box, etc...) voir l'export vers Android (comment ça j'insiste ^^).
Concernant les fonctions qu'on peut coder soi-même vous pouvez regarder ici, car je trouve que c'est plutôt bien fait (notamment animation, physique et collision) :
https://www.appgamekit.com/documentatio ... Sprite.htm
L'idéal serait de créer un topic "Jeu 2D", en post-it dans la rubrique "Trucs et astuces" qui regrouperait toutes les fonctions qu'on trouve un peu partout sur les divers forums (animations, physique, collision, etc...).
Je suis plutôt d'accord avec toi concernant les fonctions d'animation de sprite, mais d'une manière générale, je me demande si Fred ne doit pas se concentrer sur d'autres fonctions qu'on ne peut pas coder soi-même.
Car même si ce serait beaucoup mieux des fonctions natives pour l'animation de sprites, les particules ou la physique (pour le jeu ou pour des applications), on peut faire tout ça tout seul .
Par contre, il y a d'autres choses qu'on ne peut pas faire soi-même, comme la gestion de shaders (pour la 2D), dessiner sur un sprite (ou le render to texture pour la 2D), l'ajout de nouveaux gadgets (dockable par exemple, propertie box, etc...) voir l'export vers Android (comment ça j'insiste ^^).
Concernant les fonctions qu'on peut coder soi-même vous pouvez regarder ici, car je trouve que c'est plutôt bien fait (notamment animation, physique et collision) :
https://www.appgamekit.com/documentatio ... Sprite.htm
L'idéal serait de créer un topic "Jeu 2D", en post-it dans la rubrique "Trucs et astuces" qui regrouperait toutes les fonctions qu'on trouve un peu partout sur les divers forums (animations, physique, collision, etc...).
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: 2D sprite animation
elle ne vous plaisent pas mes 2 fonctions ?
@djes , meme si les cellules sont rectangulaire, mes fonctions .... fonctionnent
@djes , meme si les cellules sont rectangulaire, mes fonctions .... fonctionnent
Re: 2D sprite animation
Je viens de tester, elles sont excellentes, merci .Dobro a écrit :elle ne vous plaisent pas mes 2 fonctions ?
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
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D sprite animation
Merciiiiii Fred.Fred a écrit :Pour utiliser la transparence de l'image, il faut mettre le flag "#PB_Sprite_AlphaBlending" lors du chargement, et ca devrait marcher.
@djes: Tu as effectivement raison. En parcourant le net, j'ai constaté qu'il n'y a pas de normalisation dans les planches de sprites. Finalement Pure Basic est plus souple dans la gestion des sprites. Par contre, et la aussi tu as raison, il est nécessaire de coder ses propres routines d'animations.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D sprite animation
@Blendman
j'ai migré mon code ici :
http://www.purebasic.fr/french/viewtopi ... =6&t=14289
pour eviter de polluer le topic a Falsam (meme si c'est deja bien fait )
j'ai migré mon code ici :
http://www.purebasic.fr/french/viewtopi ... =6&t=14289
pour eviter de polluer le topic a Falsam (meme si c'est deja bien fait )
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D sprite animation
Fonctionne parfaitement sous Windows mais pas sous Mac OS.Fred a écrit :Pour utiliser la transparence de l'image, il faut mettre le flag "#PB_Sprite_AlphaBlending" lors du chargement, et ca devrait marcher.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D sprite animation
Tu peux poster un code d'exemple dans le forum bug du forum anglais ? Ca devrait marcher.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D sprite animation
Je prépare un code miminum et je poste.Fred a écrit :Tu peux poster un code d'exemple dans le forum bug du forum anglais ? Ca devrait marcher.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%