Page 1 sur 2

ralentissement sprite???resolu

Publié : mer. 03/sept./2008 9:26
par geantvert
bonjour tout le monde
petit probleme lorsque je lance mon jeu(qui n'est pas fini
le sprite asteroide1 semble ralentir l'affichage
je joints tout mes fichiers a l'adreese ci dessous
http://www.neufgiga.com/n/15-17/folder/18862400/
merci d'avance

Publié : mer. 03/sept./2008 10:43
par Anonyme
Le lien donne sur une page neuf , aucun lien n'est dispo pour downloader.

Publié : mer. 03/sept./2008 11:29
par Le psychopathe
Cpl.Bator a écrit :Le lien donne sur une page neuf , aucun lien n'est dispo pour downloader.
+1

Publié : mer. 03/sept./2008 12:24
par geantvert
es tu alle dans mes documents

Publié : mer. 03/sept./2008 12:27
par geantvert
essayez ce nouveau lien j'espere que cela marche c'est pas simple tout cela
http://www.neufgiga.com/n/50-17/share/L ... 477f524f3/

Publié : mer. 03/sept./2008 13:13
par Anonyme
c'est bon , je matte tout ca , sinon le 1° lien nous envois sur le portail de neuf, essaye le en te déconnectant... :wink:

Publié : mer. 03/sept./2008 13:14
par Anonyme
y a pas de code dans ton archive... tu veut que l'on t'aide comment ? 8O

Publié : mer. 03/sept./2008 13:26
par geantvert
je suis pas au point
le fichier 010908 est le fichier source normalement ou je n y comprends plus rien
autrement voila mon code

Code : Tout sélectionner

;modi 070808
;apparition enva sur score



If InitEngine3D()=0 Or InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 Or InitSound()=0 Or InitMovie()=0
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0) 
     End 
EndIf
UsePNGImageDecoder()
UseOGGSoundDecoder()
Enumeration 
#explos1wav;son explosion
#galax ;sprite fond d'ecran
#vaisseau  ;sprite vaisseau
#tir1  ;missile 1ee
#aster1;asteroide 1
#aster2;asteroide 2
#explosion ;=60 frame anim explosion 1
#explovai;=30 frame anim explosion 2
#cinq;musique
#enemi1
#boum ;explosion vaisseau joueur
#boum3d;pour zoom
#encadre
#envahis
#enva
EndEnumeration 
Global ta2=0,ta1=0,te1=0,score=200,t=0 ,r=Random(2),scrolling=0,vie=10,vitesse=5
Global explosion.AnimSprite,explovai.animsprite,jouani=0,animx,animy,jouani2=0,animx2,animy2
Global eva1=0,depx=0,depbord=1,nbenva;asteroide1=40+Random(700)
Global MouseExClic.b, MouseClic.b, MousePressed.b, MouseReleased.b,pericer=0,rayon=500

OpenScreen(800,600,32,"ecranjeu") 

;son musique******************************************
LoadSound(#explos1wav,"c:\space\explos1.wav")
LoadSound(#cinq,"c:\space\54.wav")

;image et sprite**************************************************************
LoadSprite(#encadre,"c:\space\encadre.png")
TransparentSpriteColor(#encadre,$ffffff)
LoadSprite(#galax,"c:\space\gala1.png") ;
LoadSprite(#aster1,"c:\space\aster1.png")
TransparentSpriteColor(#aster1,$ffffff)
LoadSprite(#aster2,"c:\space\aster2.png")
TransparentSpriteColor(#aster2,$ffffff)
LoadSprite(#vaisseau,"c:\space\vaisseau.png",0)
TransparentSpriteColor(#vaisseau,$ffffff) 
LoadSprite(#tir1,"c:\space\tir1.png",0) 
TransparentSpriteColor(#tir1,$ffffff) 
MouseLocate(385,520)
LoadSprite(#enemi1,"c:\space\enemi1.png",0)
TransparentSpriteColor(#enemi1,$ffffff)
LoadSprite(#boum,"c:\space\spiro.png",#PB_Sprite_Texture)
CreateSprite3D(#boum3d,#boum)
LoadSprite(#explosion,"c:\space\explosion.png",0)
CreateAnimSprite(explosion,#explosion,70,70,50);explosion 1variable animsprite
TransparentSpriteColor(#explosion,$ffffff)
LoadSprite(#explovai,"c:\space\explovai.png",0)
CreateAnimSprite(explovai,#explovai,98,100,100);explosion 2 vaisseau
TransparentSpriteColor(#explovai,$ffffff)

;**************************************************
;declare les procedures
Declare addtir(posx.l,posy.l)
Declare gestiontir()
Declare addenva()
Declare addaster1(posx.l,posy.l)
Declare affaster1()
Declare detectclic()
Declare affaster2()
Declare addaster2(posx.l,posy.l)
#maxenva=30
;************************************************************
Structure s_sprite
id.l
posx.l
posy.l
EndStructure
Global NewList tirjoueur.s_sprite()
Global NewList enva.s_sprite()
Global enva.s_sprite
Global NewList asteroide1.s_sprite()
Global asteroide1.l
Global NewList asteroide2.s_sprite()
Global  asteroide2.l
;*********************************************
;sprite grille
For nbenva=#enva To #enva+#maxenva
LoadSprite(nbenva,"c:\space\envah1.png",0)
Next nbenva
For ay=50 To 150 Step 50
For ax=104 To 680 Step 64
k+1
AddElement(enva())
enva()\id=#enva+k
enva()\posx=ax
enva()\posy=ay
Next ax
Next ay

;*********************************************
;**  programme principale                   **
;*********************************************
Repeat 
  
  DisplaySprite(#galax,0,scrolling) 
  DisplaySprite(#galax,0,scrolling-600) 
  scrolling+2:If scrolling>600:scrolling=0:EndIf
 
  ExamineMouse() 
  ExamineKeyboard()
  addtir(posx,posy)
  DetectClic()
  gestiontir()
 If jouani=1:DisplayAnimSprite(explosion,animx,animy)  ;l'astuce 
 If 60=CurrentAnimFrame(explosion):jouani=0
 EndIf
 EndIf
 If jouani2=1:ReleaseMouse(1):DisplayAnimSprite(explovai,animx2,animy2)
;  If 29=CurrentAnimFrame(explovai):gestionvie(): MouseLocate(385,520):jouani2=0:ReleaseMouse(0):  EndIf
  EndIf
  ;-------------------------------------
   Select r;affiche au hasard different obstacles
  Case 0:addaster1(posx.l,posy.l):
  Case 1:addaster2(posx.l,posy.l) 
  Case 2:r=Random(2);addaster1(posx.l,posy.l)
  EndSelect

 ;--------------------------------------
 If jouani2<>1;gestion souris
 DisplayTransparentSprite(#vaisseau,MouseX(),MouseY()) 
 If MouseX()<42 :MouseLocate(42,MouseY()):EndIf
 If MouseX()>728 :MouseLocate(728,MouseY()):EndIf
 If MouseY()<42 :MouseLocate(MouseX(),42):EndIf
 If MouseY()>496 :MouseLocate(MouseX(),496):EndIf
 EndIf
 ;difficulte niveau suivant scoreenvah1x
 If score>20 And score <40 :vitesse=7:EndIf
 If score>40 And score <80 :vitesse=9:EndIf
 If score>80 And score <100 :vitesse=11:EndIf
 If score>100 And score <200 :vitesse=13:EndIf
 ;-------------------------------------------
 If score>200: addenva() :EndIf
 ;--------------------------------------
DisplayTransparentSprite(#encadre,0,0)

    StartDrawing(ScreenOutput()) 
    DrawingMode(#PB_2DDrawing_Transparent) 
    DrawText(50,570,"VIE   "+Str(vie))
    DrawText(200,570,"SCORE   "+Str(score)+"      enva"+Str(r))
    StopDrawing()
    
    FlipBuffers()
Until KeyboardPushed (#PB_Key_Escape) 

End 
;*******************************************************
;procedures ********************************************
;*******************************************************
  Procedure addtir(posx.l,posy.l)
AddElement(tirjoueur())
tirjoueur()\posx=posx
tirjoueur()\posy=posy
 
EndProcedure
;***************************************

  Procedure gestiontir()
 Select Mousereleased;on a relache la souris
Case 0
t=1
Case 1
t=0
 EndSelect
If t=0
tirjoueur()\posx=MouseX()+13
tirjoueur()\posy=MouseY()
EndIf
If t=1
   
ForEach tirjoueur()
tirjoueur()\posy-5
DisplayTransparentSprite(#tir1,tirjoueur()\posx,tirjoueur()\posy) 
If  tirjoueur()\posy=0:score+1
t=0
tirjoueur()\posy=MouseY()
DeleteElement(tirjoueur())
Continue
EndIf
;-------------------------------------------------
 ForEach enva() ;controle si tir reussi
If SpritePixelCollision(#tir1,tirjoueur()\posx,tirjoueur()\posy,enva()\id,enva()\posx,enva()\posy) And score > 201
 DeleteElement(tirjoueur())
 DeleteElement(enva())
 PlaySound(#explos1wav)
 t=0
;Break 
 EndIf
 
 ;-------------------------------------------------
 ForEach asteroide1(); controle tir reussi
If SpritePixelCollision(#tir1,tirjoueur()\posx,tirjoueur()\posy,#aster1,asteroide1()\posx,asteroide1()\posy)
DeleteElement(tirjoueur())
 DeleteElement(asteroide1())
 PlaySound(#explos1wav)
  t=0 
;Break 

 EndIf
;------------------------------------------------
ForEach asteroide2(); controle tir reussi
If SpritePixelCollision(#tir1,tirjoueur()\posx,tirjoueur()\posy,#aster2,asteroide1()\posx,asteroide1()\posy)
DeleteElement(tirjoueur())
 DeleteElement(asteroide2())
 PlaySound(#explos1wav)
  t=0 
;Break 

 EndIf
 ;-------------------------------------------------
 Next
 Next
 Next 
 Next
 EndIf
EndProcedure 
 ;***************************************
  Procedure addenva()
 
depx=depx+depbord
 If depx=31:depbord=-1:EndIf
If depx=-31:depbord=1:EndIf
 ForEach enva()

   DisplayTransparentSprite(enva()\id,enva()\posx+depx,enva()\posy)
TransparentSpriteColor(enva()\id,$ffffff)
Next
EndProcedure
;******************************************************
Procedure addaster1(posx.l,posy.l)
If CountList(asteroide1())=0
AddElement(asteroide1())
 asteroide1()\posy=-100:asteroide1()\posx=40+Random(700)
 EndIf
 affaster1()
EndProcedure
;***************************************
Procedure affaster1()
ForEach asteroide1()
asteroide1()\posy+vitesse
DisplayTransparentSprite(#aster1,asteroide1()\posx,asteroide1()\posy)
If asteroide1()\posy>600
DeleteElement(asteroide1())
r=Random(2)
;Break
EndIf
Next
EndProcedure
;*******************************************************
Procedure addaster2(posx.l,posy.l)
If CountList(asteroide2())=0
AddElement(asteroide2())
 asteroide2()\posy=-100:asteroide2()\posx=40+Random(700)
 EndIf
 affaster2()
EndProcedure
;*********************************************************************
Procedure affaster2()
ForEach asteroide2()        
asteroide2()\posy+vitesse
DisplayTransparentSprite(#aster2,asteroide2()\posx,asteroide2()\posy)
If asteroide2()\posy>600
DeleteElement(asteroide2())
r=Random(2)
;Break
EndIf
Next
 
 EndProcedure   
 ;****************************************************************
  Procedure DetectClic() ;permet le tir coup par coup je remercie untel du forum j'ai pas le nom
 MouseClic     = #Null 
  MouseReleased = #Null 
  If MouseButton(1) And MouseExClic = #Null 
      MouseClic = #True 
  EndIf 
  If MouseButton(1)=0 And MouseExClic = #True 
      MouseReleased = #True 
     
  EndIf 
  MouseExClic  = MouseButton(1) 
  MousePressed = MouseButton(1) 
 
EndProcedure

Publié : mer. 03/sept./2008 13:30
par Anonyme
avec des extentions .pb cela aurais été plus clair , mais il manque des trucs concerant CreateAnimSprite & co

Publié : mer. 03/sept./2008 13:50
par geantvert
mon programme est loin d'etre fini ,je tatonne mais est ce que tu arrives a le faire tourner

Publié : mer. 03/sept./2008 14:01
par Anonyme
ba nan :D manque encore des includes ou une lib

Publié : mer. 03/sept./2008 14:05
par Anonyme
Aïe le code me fait peur :D

j'ai trouvé de quoi optimisé


l'utilisation de SpritePixelCollision() est TRES gourmande en temps CPU
il faut faire un test de boite AVANT

càd :

Code : Tout sélectionner

if SpriteCollision()
   if SpritePixelCollision()
     ;//TON CODE
   endif 
endif 
Ton soucis viens de là sans doute.

Publié : mer. 03/sept./2008 14:23
par geantvert
je te remercie de ta patience
c'est surement la librairie animsprite
je l'ai trouve en telechargant puretools v0.21
sur basic univers mais comment on fait pour la mettre dans le dossier
du jeu
je ne sais meme pas a quoi cela ressemble
purebasic c'est pas simple du tout pour les amateurs complets

Publié : mer. 03/sept./2008 14:29
par Anonyme
purebasic c'est pas simple du tout pour les amateurs complets
Mais si , y a 3 ou 4 ans je ne savais pas programmé... :D

Publié : mer. 03/sept./2008 15:37
par Ar-S
Cpl.Bator a écrit : Mais si , y a 3 ou 4 ans je ne savais pas programmé... :D
Vrai !!?? 8O ça m'troue l'cul !