Page 1 sur 1

animation sprite le retour

Publié : mer. 26/mars/2008 13:24
par geantvert
bonjour quelqu'un connait il la biblio animsprite
j'essai d'activer une explosion lors d'un tir avec animsprite
dans le p principale pas de probleme l'animation se joue et boucle en continu,mais dans ma procedure ,j'apercois mon ani mais pas completement ????
comment faire

Code : Tout sélectionner

If InitEngine3D()=0 Or InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 Or InitSound()=0 
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0) 
     End 
EndIf

UsePNGImageDecoder()

Enumeration 

#explos1wav
#galax 
#vaisseau  
#tir1 
#aster1
#explosion=60


EndEnumeration 
Global posxtir,posytir,tirjoueur,t=0,t1=0,asterx,astery=-100,score,scrolling=0,asteroide,explosion.AnimSprite

OpenScreen(800,600,32,"ecranjeu") 
LoadSprite(#galax,"c:\space\gala1.png") ;
LoadSprite(#aster1,"c:\space\aster1.png")
TransparentSpriteColor(#aster1,$ffffff)
LoadSprite(#vaisseau,"c:\space\vaisseau.png",0);charge le dessin 
TransparentSpriteColor(#vaisseau,$ffffff) 
LoadSprite(#tir1,"c:\space\tir1.png",0) 
TransparentSpriteColor(#tir1,$ffffff) 
MouseLocate(385,520)
LoadSound(#explos1wav,"c:\space\explos1.wav")
LoadSprite(#explosion,"c:\space\explosion.png",0)
CreateAnimSprite(explosion,#explosion,70,70,100);explosion variable animsprite
TransparentSpriteColor(#explosion,$ffffff)


;**************************************************
Declare explosionaster1()
Declare  coltirast()
;*********************************
Structure tirjoueur
posxtir.l
posytir.l
EndStructure
Global NewList position.tirjoueur()
;**************************animx=
 
;*********************************
Structure asteroide
asterx.l
astery.l
vitesse.l
EndStructure
Global NewList coord.asteroide()
;*************************************

;****************************** 
        Procedure gestiontir() 
Select  KeyboardReleased(#PB_Key_Space)
Case 0
t=1
Case 1
t=0
 EndSelect
If t=1:Goto freintir:EndIf
If t=0
InsertElement(position())
       position()\posxtir=MouseX()+13
       position()\posytir=MouseY()
       EndIf
t=1
  freintir:    
     
     While NextElement(position())
 
     position()\posytir-5
DisplayTransparentSprite(#tir1,position()\posxtir,position()\posytir) 

If  position()\posytir<=0:t=0
EndIf
coltirast()
     Wend
     t=0
ResetList(position())
 
EndProcedure 
;*********************************** 
        Procedure afficheaster()
        InsertElement(coord())
If t1=1:Goto freinaster1:EndIf
If t1=0:coord()\asterx=Random(740):EndIf
t1=1
freinaster1:
While NextElement(coord())
t1=1
coord()\astery+5
DisplayTransparentSprite(#aster1,coord()\asterx,coord()\astery)

If coord()\astery>600:t1=0:coord()\astery=-100
 DeleteElement(coord())   
EndIf

Wend
t1=0

EndProcedure
 ;*********************************************************************************************************
 ;c'est ici que je me casses la tete
 
 
 
         Procedure coltirast()
         If SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster1,coord()\asterx,coord()\astery) 
        explosionaster1()
        Repeat
     DisplayAnimSprite(explosion,coord()\asterx,coord()\astery)
     UseBuffer(#explosion)
     Until AnimFrameCount(explosion)>30
          DeleteElement(coord()):t1=0
          
           
         DeleteElement(position())
          
         t=0
      EndIf
        EndProcedure
;*******************************************************************************************************************
        Procedure explosionaster1()
         ;PlaySound(#explos1wav)
   
     EndProcedure
     
;************************************
;Procedure score()
;score=score+10
;EndProcedure
; ********************************************
; *  programme principale                    *
; ********************************************
Repeat 
    

   
  
    DisplaySprite(#galax,0,scrolling) 
    DisplaySprite(#galax,0,scrolling-600) 
    scrolling+2:If scrolling>600:scrolling=0:EndIf 
    DisplayTransparentSprite(#vaisseau,MouseX(),MouseY()) 

    ExamineMouse() 
    ExamineKeyboard() 
    gestiontir()
    afficheaster()

    FlipBuffers() 
Until KeyboardPushed (#PB_Key_Escape) 

End 

Publié : mer. 26/mars/2008 17:52
par Anonyme
Le code est a mon avis faux

Code : Tout sélectionner

 Procedure coltirast()
         If SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster1,coord()\asterx,coord()\astery)
        explosionaster1()
        Repeat
     DisplayAnimSprite(explosion,coord()\asterx,coord()\astery)
     UseBuffer(#explosion)
     Until AnimFrameCount(explosion)>30
          DeleteElement(coord()):t1=0
         
           
         DeleteElement(position())
         
         t=0
      EndIf
        EndProcedure 

plus précisement ici :

Code : Tout sélectionner

        Repeat
     DisplayAnimSprite(explosion,coord()\asterx,coord()\astery)
     UseBuffer(#explosion)
     Until AnimFrameCount(explosion)>30
Tu fait jouer le sprite sur 30 frame sans aucun rafraichissement de l'écran. Comment veut tu que l'animation soit vu ?

je ferais plus un truc du genre :
si FrameCount>30
EffaceLeSprite.
finsi

Utilise des listes chainées mélanger à des structures pour alléger ton code et te facilité la gestion des divers éléments.

Publié : mer. 26/mars/2008 17:56
par Anonyme
A oui aussi des erreurs très importante que j'ai vu vite fait :

Code : Tout sélectionner

 Procedure coltirast()
         If SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster1,coord()\asterx,coord()\astery)
        explosionaster1()
        Repeat
     DisplayAnimSprite(explosion,coord()\asterx,coord()\astery)
     UseBuffer(#explosion)
     Until AnimFrameCount(explosion)>30
          DeleteElement(coord()):t1=0
         
           
         DeleteElement(position())
         
         t=0
      EndIf
        EndProcedure 



ici pour etre exact :

Code : Tout sélectionner

 DeleteElement(coord()):t1=0
 DeleteElement(position())
Quel élément tu supprimes ? si l'index change entre 2 ? comment tu fait pour le savoir , sa va pas supprimer le bon élément. ou voir même un plantage de l'appli. y a des bases a revoir à mon avis.

@+

Publié : mer. 26/mars/2008 22:49
par geantvert
merci beaucoup on ne sent pas seul
j'ai jamais fait de programmation j'essai de comprendre pure c'est pas facile mais petit a petit l'oiseau fait son nid
je vais me servir de vos conseils et eplucher la question
merci encore

Publié : jeu. 27/mars/2008 17:37
par Kayne
Si tu veux va voir la page des tutos (premiers post) pour apprendre a programmer.

anim[resolu]

Publié : sam. 29/mars/2008 15:00
par geantvert
bon j'ai reussi ce que je voulais faire faut que j'ameliore
mais je vous remercie tous

Code : Tout sélectionner

If InitEngine3D()=0 Or InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 Or InitSound()=0 
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0) 
     End 
EndIf

UsePNGImageDecoder()

Enumeration 

#explos1wav
#galax 
#vaisseau  
#tir1 
#aster1
#explosion=60


EndEnumeration 
Global posxtir,posytir,tirjoueur,t=0,t1=0,asterx,astery=-100,score,scrolling=0,asteroide,explosion.AnimSprite,fra,fra1,jouani=0,animx,animy

OpenScreen(800,600,32,"ecranjeu") 
LoadSprite(#galax,"c:\space\gala1.png") ;
LoadSprite(#aster1,"c:\space\aster1.png")
TransparentSpriteColor(#aster1,$ffffff)
LoadSprite(#vaisseau,"c:\space\vaisseau.png",0);charge le dessin 
TransparentSpriteColor(#vaisseau,$ffffff) 
LoadSprite(#tir1,"c:\space\tir1.png",0) 
TransparentSpriteColor(#tir1,$ffffff) 
MouseLocate(385,520)
LoadSound(#explos1wav,"c:\space\explos1.wav")
LoadSprite(#explosion,"c:\space\explosion.png",0)
CreateAnimSprite(explosion,#explosion,70,70,20);explosion variable animsprite
TransparentSpriteColor(#explosion,$ffffff)


;**************************************************
Declare explosionaster1()
Declare  coltirast()
;*********************************
Structure tirjoueur
posxtir.l
posytir.l
EndStructure
Global NewList position.tirjoueur()
;**************************animx=
 
;*********************************
Structure asteroide
asterx.l
astery.l
vitesse.l
EndStructure
Global NewList coord.asteroide()

;****************************** 
        Procedure gestiontir() 
Select  KeyboardReleased(#PB_Key_Space)
Case 0
t=1
Case 1
t=0
 EndSelect
If t=1:Goto freintir:EndIf
If t=0
InsertElement(position())
       position()\posxtir=MouseX()+13
       position()\posytir=MouseY()
       EndIf
t=1
  freintir:    
     
     While NextElement(position())
 
     position()\posytir-5
DisplayTransparentSprite(#tir1,position()\posxtir,position()\posytir) 

If  position()\posytir<=0:t=0
EndIf
coltirast()
     Wend
     t=0
ResetList(position())
 
EndProcedure 
;*********************************** 
        Procedure afficheaster()
        InsertElement(coord())
If t1=1:Goto freinaster1:EndIf
If t1=0:coord()\asterx=Random(740):EndIf
t1=1
freinaster1:
While NextElement(coord())
t1=1
coord()\astery+5
DisplayTransparentSprite(#aster1,coord()\asterx,coord()\astery)

If coord()\astery>600:t1=0:coord()\astery=-100
 DeleteElement(coord())   
EndIf

Wend
t1=0

EndProcedure
 ;*********************************************************************************************************
         Procedure coltirast()
         If SpritePixelCollision(#tir1,position()\posxtir,position()\posytir,#aster1,coord()\asterx,coord()\astery) 
        explosionaster1()
        jouani=1;----------------------------------------------------
      animx=coord()\asterx:animy=coord()\astery;-----------------------------------------------------
        DeleteElement(coord()):t1=0
         DeleteElement(position())
         t=0
        
      EndIf
    
        EndProcedure
;*******************************************************************************************************************
        Procedure explosionaster1()
         ;PlaySound(#explos1wav)
   
     EndProcedure
     
;************************************
;Procedure score()
;score=score+10
;EndProcedure
; ********************************************
; *  programme principale                    *
; ********************************************
Repeat 
    

   
  
    DisplaySprite(#galax,0,scrolling) 
    DisplaySprite(#galax,0,scrolling-600) 
    scrolling+2:If scrolling>600:scrolling=0:EndIf 
    DisplayTransparentSprite(#vaisseau,MouseX(),MouseY()) 

    ExamineMouse() 
    ExamineKeyboard()
     
    gestiontir()
    afficheaster()
 If jouani=1:DisplayAnimSprite(explosion,animx,animy)  ;l'astuce---------------------------- 
 If 60=CurrentAnimFrame(explosion):jouani=0
 EndIf
 EndIf
 
;     StartDrawing(ScreenOutput()) 
;      
;      DrawText(200,200,"frame"+Str(fra))
;      DrawText(200,220,"framecurrent"+Str(fra1)+Str(i))
;     ; 
;    StopDrawing() 
    FlipBuffers() 
    
Until KeyboardPushed (#PB_Key_Escape) 

End 
bon c'est pas encore stable mais je suis content de moi
merci et a+