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.
- Tu tires avec la touche de Control gauche
- Tu connais le nombre de vie restant au Boss (
boss\Life)
Remplace
par
Code : Tout sélectionner
If KeyboardPushed(#PB_Key_LeftControl) And gShootReady=#True And boss\Life>0