Page 2 sur 4

Re: [2D] Kill Birds

Publié : mer. 12/mars/2014 18:24
par G-Rom
Pour te simplifier la vie, le nom sur les animations via des map & des listes :
Comme cela un coup de
displayAnimationSprite(Birdie,"fly left",100,100)
et tu affiches l'animation voulue ;)
Facile à amélioré en plus :D

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 

Re: [2D] Kill Birds

Publié : mer. 12/mars/2014 18:49
par falsam
Voila un system intéressant qui se rapproche de certains framework javascript :) Merci G-Rom.

Re: [2D] Kill Birds

Publié : mer. 12/mars/2014 21:45
par venom
Génial ce petit jeux Bravo et merci du partage 8)

Moi ça me fait penser a un jeu de chasse au canard sur nes, j'avais même le gun en guise de manette :D







@++

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 21:24
par Atlante
Sympa mais comme tous les jeux 2d PureBasic ça déconne grave avec la souris (ça se deplace pas ou ça saute 5cm d'un coup).
Cf le lien ci-dessous :)
@+

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 22:44
par falsam
Atlante a écrit :Sympa mais comme tous les jeux 2d PureBasic ça déconne grave avec la souris (ça se deplace pas ou ça saute 5cm d'un coup).
Bizarre ton soucis (du moins avec ce jeu) je ne rencontre pas ce probléme et parmi tout ceux qui sont intervenus sur ce post, personne n'en parle.

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:01
par Atlante
J'ai une souris roccat et je sais que les personnes avec des souris razer ont le problème aussi.

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:05
par falsam
Atlante a écrit :J'ai une souris roccat et je sais que les personnes avec des souris razer ont le problème aussi.
On pourrait supposer que ces souris ou plutot les drivers sont la cause de ces soucis ? Pourquoi impliquer forcément Pure Basic ? :)
Atlante a écrit :Sympa mais comme tous les jeux 2d PureBasic ça déconne grave avec la souris

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:14
par Atlante
Oui mais non, déjà vérité tout est à jour et j'ai aucun soucis dans tous les jeux (cs, battlefield 3&4, starcraft2, rift...).
Je pense vraiment que c'est un problème côté PB, cela ne doit pas prendre en compte le matos qui sort de l'ordinaire ou s'appuyer sur windows. J'en sais trop rien mais je ne suis pas le seul.
Il y a même un topic sur le forum anglais pour ce problème.

Voila une capture d'écran que la config souris :
Image

Sinon en modifiant ton code avec ce topic : http://www.purebasic.fr/french/viewtopi ... ilit=mouse
ça fonctionne bien :)

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:21
par falsam
Ok je vais adapter mon code (et les prochains) en proposant cette astuce en option je pense. Une case à cocher surement. Merci pour cette info.

Reedit : Mince ça ne fonctionne que sous Windows !

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:48
par Mindphazer
Mindphazer a écrit : Hum...
Pas sur Mac, visiblement.
Du coup maintenant, les piafs sont tous affichés sur un carré noir
Damned !
J'avais pas retéléchargé les images, et j'avais encore le fichier birds.png avec le fond noir :?
Du coup, avec le bon fichier, ça fonctionne très bien
Sorry :oops: :oops: :oops:

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:52
par falsam
Ha ben bravo !!! C'est aussi de ma faute. J'aurais du te demander si tu avais bien les bonnes images. :)

Re: [2D] Kill Birds

Publié : jeu. 13/mars/2014 23:56
par Mindphazer
Ben oui
En plus tu avais bien précisé code et téléchargement mis à jour dans ton post...
Faut que je m'achète de lunettes

Re: [2D] Kill Birds

Publié : ven. 14/mars/2014 9:32
par flaith
Bien symphatique, merci :)

Re: [2D] Kill Birds

Publié : ven. 14/mars/2014 9:48
par Mesa
J'aimerais bien pouvoir tirer plusieurs fois de suite, histoire de faire un carnage dans les règles de l'art, tant qu'à faire :D :D

M.

Re: [2D] Kill Birds

Publié : ven. 14/mars/2014 12:07
par Ar-S
je viens d'essayer le code, je rejoints Atlante, j'ai le même soucis avec ma Cyborg RAT5