Page 1 sur 1

petit probleme de son avec mon code

Publié : sam. 14/mai/2016 17:53
par Bernie
Bonsoir à tous
Je rencontre un problème quand le boss est détruit normalement il y a le son de l'explosion problème le boss se détruit bien mais pas de son
c'est dans cette partie du code :

Code : Tout sélectionner

;---Diminution du nombre de vie ou destruction du boss
         If gLife>0
           gLife-10
           Boss\Life -10
         ElseIf Boss\Life =0 And gLife=0
           PlaySound(#Explosion)
           SoundVolume(#Explosion,30) 
           FreeSprite(#Boss)
         EndIf
       EndIf
ensuite quand le boss est détruit je voulais que le vaisseau s’arrête de tirer
il a valu que je mette ça après l'utilisation du clavier sinon ça marchait pas

Code:

Code : Tout sélectionner

If boss\Life=0 And glife=0
    gShootReady=#False   
  EndIf
pourquoi il y a pas le son et comment vous ferez pour que une fois le boss détruit on arrête le tir du vaisseau ? ( afin d’éviter les doublons)

merci d'avance

https://www.dropbox.com/s/1h13xq4mj7dmm ... t.zip?dl=0

Re: petit probleme de son avec mon code

Publié : dim. 15/mai/2016 0:25
par falsam
Bernie a écrit :pourquoi il y a pas le son
Regarde de plus prés cette portion de ton code.

Code : Tout sélectionner

       ;---Il y a t'il collision entre un tir du vaisseau  et le boss? 
       If Boss\Life>0 And SpriteCollision(#Boss,boss\Posx,Boss\Posy,Shoots()\Sprite,Shoots()\Posx,Shoots()\Posy)
         FreeSprite(Shoots()\Sprite)
         DeleteElement(Shoots(),#True)
         ;---Diminution du nombre de vie ou destruction du boss
         If gLife>0
           gLife-10
           Boss\Life -10
         ElseIf Boss\Life =0 And gLife=0
           PlaySound(#Explosion)
           SoundVolume(#Explosion,30)  
           FreeSprite(#Boss)
         EndIf
       EndIf
Si tu places un Debug "passe" juste après ElseIf Boss\Life =0 And gLife=0 tu verras que jamais tu passes derrière ton ElseIf.

Pourquoi ?
- Tant que le nombre de vies > 0 tu retires 10 points de vie au Boss.
- Avant le ElseIf à un moment tu auras Boss\Life et gLife = 0
- On est en droit de se dire que tu vas passer la condition ElseIF ?
- Et bien non. car tu testes la collision que si Boss\Life>0
- Il est donc impossible de passer dans le code s’exécutant après le ElseIf.

Que faire alors ?
Le plus simple est de tester le nombre de vies de ton Boss en dehors du test de collision.

Remplace

Code : Tout sélectionner

   ;---Affichage des tirs lasers du vaisseau 
   ForEach Shoots()
     Shoots()\Posy-2
     If Shoots()\Posy<0
       FreeSprite(Shoots()\Sprite)
       DeleteElement(Shoots(),#True)
       
       
     Else
       DisplayTransparentSprite(Shoots()\Sprite,Shoots()\Posx,Shoots()\Posy)
       ;---Il y a t'il collision entre un tir du vaisseau  et le boss? 
       If Boss\Life>0 And SpriteCollision(#Boss,boss\Posx,Boss\Posy,Shoots()\Sprite,Shoots()\Posx,Shoots()\Posy)
         FreeSprite(Shoots()\Sprite)
         DeleteElement(Shoots(),#True)
         ;---Diminution du nombre de vie ou destruction du boss
         If gLife>0
           gLife-10
           Boss\Life -10
         ElseIf Boss\Life =0 And gLife=0
           PlaySound(#Explosion)
           SoundVolume(#Explosion,30)  
           FreeSprite(#Boss)
         EndIf
       EndIf
     EndIf
   Next
  ;---Affichage des tirs lasers de l'ennemi
par

Code : Tout sélectionner

  ;---Affichage des tirs lasers du vaisseau 
  ForEach Shoots()
    Shoots()\Posy-2
    If Shoots()\Posy<0
      FreeSprite(Shoots()\Sprite)
      DeleteElement(Shoots(),#True)
      
    Else
      DisplayTransparentSprite(Shoots()\Sprite,Shoots()\Posx,Shoots()\Posy)
      ;---Il y a t'il collision entre un tir du vaisseau  et le boss? 
      If Boss\Life>0 And SpriteCollision(#Boss,boss\Posx,Boss\Posy,Shoots()\Sprite,Shoots()\Posx,Shoots()\Posy)
        FreeSprite(Shoots()\Sprite)
        DeleteElement(Shoots(),#True)
        ;---Diminution du nombre de vie ou destruction du boss
        If gLife > 0
          gLife-10
          Boss\Life -10
        EndIf
      EndIf
    EndIf
  Next
  
  If Boss\Life = 0 And IsSprite(#Boss)
    PlaySound(#Explosion)
    SoundVolume(#Explosion,30)  
    FreeSprite(#Boss)
  EndIf
  
  ;---Affichage des tirs lasers de l'ennemi
Bernie a écrit :comment vous ferez pour que une fois le boss détruit on arrête le tir du vaisseau ?
Supprime la portion de code que tu as ajoutée.

Code : Tout sélectionner

  If boss\Life=0 And glife=0 
    gShootReady=#False    
  EndIf
- Tu tires avec la touche de Control gauche
- Tu connais le nombre de vie restant au Boss (boss\Life)

Remplace

Code : Tout sélectionner

If KeyboardPushed(#PB_Key_LeftControl) And gShootReady=#True
par

Code : Tout sélectionner

If KeyboardPushed(#PB_Key_LeftControl) And gShootReady=#True And boss\Life>0 

Re: petit probleme de son avec mon code

Publié : dim. 15/mai/2016 8:39
par Bernie
Un grand merci falsam pour ton aide et tes conseils

Comment je peux faire pour que

1--- Si le vaisseau a plus de munitions le boss arrête de tirer

2--- Si le vaisseau a plus de blindage il sera détruit et le boss arrête de tirer