Page 1 sur 1

completement perdu[resolu]

Publié : mar. 08/janv./2008 21:33
par geantvert
bonsoir quelqu'un pourrait il m'expliquer comment on peut faire apparaitre une animation lors d'une collision ,le plus simplement possible j'ai une petite tete et l'age n'arrange rien
sans refaire tout mon code qui est surement plein de truc bizards
je vous remerci d'avance

Code : Tout sélectionner

InitSprite():InitSprite3D():InitKeyboard():InitMouse() :InitSound() 
Enumeration 
#explosion
#explosion3d
#explos1
#galax 
#vaisseau 
#fond 
#tir1 
#feu
#aster1
EndEnumeration 
Global posxtir,posytir,tirjoueur,t=0,t1=0,asterx,astery=-100,score,scrolling=0,asteroide

OpenScreen(800,600,32,"ecranjeu") 
LoadSprite(#galax,"c:\space\gala1.bmp") 
LoadSprite(#aster1,"c:\space\aster1.bmp")
TransparentSpriteColor(#aster1,$ffffff)
LoadSprite(#vaisseau,"c:\space\vaisseau.bmp",0);charge le dessin 
TransparentSpriteColor(#vaisseau,$ffffff) 
LoadSprite(#tir1,"c:\space\tir1.bmp",0) 

LoadSprite(#explosion,"c:\space\explosion.bmp",#PB_Sprite_Texture )
TransparentSpriteColor(#explosion,$ffffff)
 CreateSprite3D(#explosion3d,#explosion)
TransparentSpriteColor(#tir1,$ffffff) 
MouseLocate(385,520)
LoadSound(#explos1,"c:\space\explos1.wav")

Declare explosionaster1()
Declare  coltirast()
;*********************************
Structure tirjoueur
posxtir.l
posytir.l
EndStructure
Global NewList position.tirjoueur()
;*********************************
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()
         DeleteElement(coord()):t1=0
        DeleteElement(position()):
        t=0
      EndIf
        EndProcedure
;************************************
        Procedure explosionaster1()
         PlaySound(#explos1)
         
         Start3D()
  For i=0 To 50000
      DisplaySprite3D(#explosion3d ,coord()\asterx,coord()\astery,255)
       Next i
       Stop3D()  

pas testable

Publié : jeu. 10/janv./2008 14:05
par beauregard
geantvert a écrit :

Code : Tout sélectionner

posxtir,posytir,tirjoueur,t=0,t1=0,asterx,astery=-100,score,scrolling=0,asteroide

bonjour, heu, peut-être as-tu besoin d'une nouvelle variable, je ne sais pas( tu n'a pas mis tes images( tu peux aussi faire un create sprite avec un simple carré en remplacement de tes images: et ainsi ton code sera testable par un autre)).

comme cela(sprite2D):

Code : Tout sélectionner

CreateSprite ( #feu  ,32,32, 0)
 StartDrawing ( SpriteOutput ( #feu  ))
  BackColor ( RGB (0,0,0))
   Box (0,0, 32, 20, RGB (255,255,255)):Box (2,2, 28, 16, RGB (55,25,25))
 StopDrawing ()
comme çà( sprite3D):

Code : Tout sélectionner

CreateSprite ( #sphoton ,32,32, #PB_Sprite_Texture )
 StartDrawing ( SpriteOutput ( #sphoton ))
  BackColor ( RGB (0,0,0))
   Box (0,0, 32, 20, RGB (255,255,255)):Box (2,2, 28, 16, RGB (55,25,25))
 StopDrawing ()
CreateSprite3D ( #sphoton3D , #sphoton ) 
Tu pourai aussi faire l'effort de rajouter un .b ou .w à la fin de tes variables.
Cordialement.

Publié : ven. 11/janv./2008 15:25
par geantvert
je te remercie de ta reponse ,ce que je veut faire c'est mettre une animation lors d'une coalision ,je ne sais pas comment faire pour avoir une animation a fond transparente
quel extension de fichier?,comment l'afficher?
je suis un vrais debutant
que m'apportera le fait de mettre un .b ou.w?
je veut bien faire un effort mais il faudrait savoir pourquoi a mon age on s'economise
je te remercie encore a+

Publié : ven. 11/janv./2008 21:38
par geantvert
comment on fait pour joindre des fichiers photo a son code merci

Publié : sam. 12/janv./2008 13:16
par beauregard
geantvert a écrit :comment on fait pour joindre des fichiers photo a son code merci
je ne suis pas sûr d'avoir bien compris, mais bon:
http://imageshack.us/
tu clique sur le bouton Parcourir, et une fois que tu as trouvé ton image dans ton PC, ben tu clique sur host it!
et après tu conserve précieusement les liens que l'on te donne sur un document texte.

Publié : sam. 12/janv./2008 14:29
par geantvert
essai pour joindre mes images
Image
Image
Image
Image
Image

Publié : sam. 12/janv./2008 15:22
par Backup
j'ai corrigé tes balises, reedite ton message pour voir comment on fait !!

ici tu ne peut donner des liens que vers des images JPG !!! ou GIF ou PNG
mais pas BMP !!!

c'est la raison pour lequel seul une seul image est visible !! :) (la Gif)

Publié : sam. 12/janv./2008 15:41
par geantvert
je te remercie enormement de ta patience
franchement ,il pourrait y avoir quand meme des procedures plus pratiques pour nous les amateurs debutants
gros merci quand j'assimile cela doucement a+

Publié : sam. 12/janv./2008 16:20
par geantvert
Image
Image
Image
Image
Image


maintenant si c'est ok pour les images comment je fais pour une explosion animee a fond transparent lors de la percussion du tir et asteroide

merci encore en esperant ne pas trop m'imposer a+ :oops:

Publié : sam. 12/janv./2008 16:39
par Backup
en fait c'est assez simple :)


une explosion c'est en fait une serie de sprite affiché au meme endroit !!
une animation c'est une succession d'images

donc il suffit de faire plusieurs sprites , 1 par image (donc 25 sprites pour une animation d'une seconde :) )


lorsque ton sprite entre en collision, tu affiche la serie de sprites d'animation a sa place !!

:)

Publié : sam. 12/janv./2008 16:44
par geantvert
franchement je me demande si tout est en ordre dans ma tete
je te remercie encore, je n'ai plus qu'a apprendre a dessiner

Publié : sam. 12/janv./2008 17:18
par Backup
voila un exemple

Code : Tout sélectionner




; code by Dobro http://michel.dobro.free.fr/
Enumeration
  #dobro 
  #Police 
  #sprite 
  #Sprite3D
  #Sprite_souris3D
  #angle
  #sprite2
EndEnumeration

; ***********************************
Resultat = InitSprite ()
Resultat = InitSprite3D ()
FontID = LoadFont ( #Police , "arial" , 50, #PB_Font_Bold )
EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran
EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran
  WindowID = OpenWindow (1, 0, 0, EcranX, EcranY, "hello" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
  WindowID = WindowID (1)
  Result = OpenWindowedScreen ( WindowID ,0,0, EcranX, EcranY, 1, 0,0)
  Resultat = InitMouse ()
  taille_du_cercle=200
  nombre_de_point=360 ; ceci determine la resolution (nombre de points)
  
  
  ; on fabrique un sprite : D
  CreateSprite ( #sprite ,32,32,#PB_Sprite_Texture) ; de 32 par 32
  StartDrawing ( SpriteOutput ( #sprite ) ) ; on va dessiner dans notre sprite (qui est au depart une cellule vide)
  Box (1, 1, 32 ,32, RGB (255,0,0)) ; je decide de dessiner un carre rouge dedans
  StopDrawing ()
  ; voila notre sprte est dessiné !! : D
  
  ; on fait un sprite3d a partir de notre sprite créé
  Resultat = CreateSprite3D(#Sprite3D, #sprite)
  
  ; on fabrique un sprite  pour la souris : D
  
  CreateSprite ( #sprite2 ,32,32,#PB_Sprite_Texture) ; de 32 par 32
  StartDrawing ( SpriteOutput ( #sprite2 ) ) ; on va dessiner dans notre sprite (qui est au depart une cellule vide)
  Box (1, 1, 2 ,32, RGB (0,255,0)) ; je decide de dessiner un carre rouge dedans
  StopDrawing ()
  
  Resultat = CreateSprite3D(#Sprite_souris3D, #sprite2)
  
  ; fabrique les spritezs animation (explosion)
  
  For i=100 To 125 ; les indice de l'explosion vont du sprite 100 a 125 (25 sprites) 
    aa=aa+10
    CreateSprite ( i ,256,256,#PB_Sprite_Texture) ;sprite maximal 256 par 256
    StartDrawing ( SpriteOutput (i ) ) ; on va dessiner dans notre sprite (qui est au depart une cellule vide)  
    Circle(128,128,aa,RGB(0,255,0)) ;
    StopDrawing () 
    Resultat = CreateSprite3D(i, i) 
  Next i
  aa=0
  
  
  
  
  
  
  
  
  iii=100 ; ceci est le premier indice de l'animation
  
  Repeat
    ExamineMouse ()
    Event= WaitWindowEvent ()
    
    ; StartDrawing ( ScreenOutput ())
    compt+1
    If compt=nombre_de_point :compt=0: EndIf ; on a fait le tour ??
    
    x=taille_du_cercle* Cos ( compt*(2*3.1415926/nombre_de_point)) + (EcranX / 2) ; la formule du cercle /360 = 360 points
    Y=taille_du_cercle * Sin ( compt*(2*3.1415926/nombre_de_point)) + (EcranY / 2) ; la formule du cercle
    ;  Box (x, Y,2, 2 , RGB (255,255,255)) ; on peux laisser une trace du dessin
    ; StopDrawing ()
    
    ; on affiche notre carre rouge : D
    
    RotateSprite3D(#Sprite3D, -#angle,1)
    Start3D()
    DisplaySprite3D(#Sprite3D, x,Y, 255) ; affiche le sprite 3D
    ; on affiche notre sprite souris : D
    DisplaySprite3D(#Sprite_souris3D, MouseX(),MouseY(), 255) ; affiche le sprite souris 3D
    Stop3D()        
    ; *****************************
    
    
    ; test de collision
    If SpritePixelCollision(#sprite, x, Y, #sprite2, MouseX(),MouseY())   
      iii=iii+1 
      If  iii=125 :iii=100:EndIf
      Start3D()
      DisplaySprite3D( iii,  MouseX()-128,MouseY()-128) ; affiche les sprites explosion   
      Stop3D()    
    EndIf
    
    
    
    
    StartDrawing ( ScreenOutput ())
    
    DrawText (20, 200, " a la fin du dessin " )
    DrawText (20, 250, " click avec le bouton droit !! " )
    StopDrawing ()
    FlipBuffers (): ; affiche l'ecran *****<------- si tu Rem ceci le sprite laisse une trace : D
    ClearScreen ( RGB (0,0,0))
    
    
    Event= WindowEvent ()
    If MouseButton (2)
      End
    EndIf
  Until Event= #PB_Event_CloseWindow 

a chaque fois que tu vas toucher le carre roucge, une pseudo explosion verte aura lieu
bien sur pour parfaire le truc, il faudrai faire disparaitre le carré rouge :D

Publié : sam. 12/janv./2008 18:10
par geantvert
alors la tu m'epates ,impeccable,que dire de plus a part merci
je me relance dans mon bout de programme
bonsoir

Publié : sam. 12/janv./2008 22:18
par beauregard
Au début de ton code, met donc plutôt çà:

Code : Tout sélectionner

If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
     End
EndIf
suivit par çà aussi:

Code : Tout sélectionner

UsePNGImageDecoder()

Publié : dim. 13/janv./2008 16:47
par geantvert
je te remercie c'est plus sympa pour tous
je vais essayer de me rabattre sur la bibli particle pour faire une explosion anime
je ne doute de rien
a bientot