Je suis actuellement en train de développer un petit jeu en AS3 sur Flash CS5, le but est d'éviter des astéroïdes qui arrivent sur mon MovieClip (un vaisseau).
Je suis parvenu à faire disparaître les Astéroïdes en cas de collision avec le vaisseau, mais lorsque ça arrive, une erreur ce produit dans l'onglet "Sortie" de Flash:
Citation
at SpaceGame_fla::MainTimeline/animationAsteroid()
J'ai déjà essayé de chercher à quoi correspondait cette erreur, apparemment je fais référence à un objet qui n’existe pas (ou plus) puisque je supprime du stage mes astéroïdes, donc normal, mais je ne sais pas comment résoudre ce problème; Ça doit venir de ma partie "Collision" tout en bas du code.
addChild(hero);
hero.speedX = 0;
hero.speedY = 0;
//Je définis la taille de ma scene
var LargeurScene:uint=stage.stageWidth;
var HauteurScene:uint=stage.stageHeight;
// Position de base du vaisseau sur la scène
(hero.x=550);
(hero.y=200);
// Touches clavier quand appuyés
stage.addEventListener(KeyboardEvent.KEY_DOWN, clavierDown);
function clavierDown(e)
{
if(e.keyCode == 37) //LEFT
{
hero.speedX = -10;
hero.scaleX = 1
}
if(e.keyCode == 39) //RIGHT
{
hero.speedX = 10;
hero.scaleX = -1
}
if(e.keyCode == 38) //UP
{
hero.speedY = -10;
}
if(e.keyCode == 40) //DOWN
{
hero.speedY = 10;
}
}
// Touches clavier quand levés
stage.addEventListener(KeyboardEvent.KEY_UP, clavierUp)
function clavierUp(e)
{
if(e.keyCode == 37)
{
hero.speedX = 0;
hero.scaleX = 1
}
if(e.keyCode == 39)
{
hero.speedX = 0;
hero.scaleX = -1
}
if(e.keyCode == 38)
{
hero.speedY = 0;
}
if(e.keyCode == 40)
{
hero.speedY = 0;
}
}
// Animation du vaisseau
stage.addEventListener(Event.ENTER_FRAME, animeHero);
function animeHero(e)
{
//Je déplace le vaisseau (hero) selon ses vitesses
hero.x += hero.speedX;
hero.y += hero.speedY;
}
// INTEGRATION DES ASTEROIDS ===================================
//Je définis le nombre d'Asteroids à générer
var nbAsteroid:uint=8;
//Je génère une boucle
for (var i:uint = 0; i<nbAsteroid; i++) {
//Création d'un Asteroid
var AsteroidNouveau = new Asteroid();
//Propriété nom
AsteroidNouveau.name='Asteroid'+i;
modifierAspectAsteroid(AsteroidNouveau,true);
//La fonction onEnterFrame simule le déplacement de la tête de lecture
AsteroidNouveau.addEventListener(Event.ENTER_FRAME,animationAsteroid);
}
//Fonction pour modifier l'aspect des Asteroids
function modifierAspectAsteroid(AsteroidActuel:MovieClip,origine:Boolean):void {
//Positionnement sur la scene et dimensions
with (AsteroidActuel) {
//Sur l'axe des y, Asteroids arrivent aléatoirement
y=Math.random()*HauteurScene;
//Sur l'axe des x, Asteroids partent de la gauche
x=0;
//Je définis une taille aléatoire pour mes Asteroids
//scaleX et scaleY prennent des valeurs de 0 a 1 en AS3
scaleY=scaleX=.1+Math.random()*.8;
}
//Gestion du déplacement pour chaque Asteroids
//La vitesse est déterminé au hasard
AsteroidActuel.VitesseHorizontale=2+Math.random()*5;
//J'affiche l'Asteroid sur la scene
addChild(AsteroidActuel);
}
//fontion pour animer l'Asteroid
function animationAsteroid(NomParticule:Event):void {
//Recupere le nom de l'Asteroid
var AsteroidActuel:MovieClip=NomParticule.currentTarget as MovieClip;
//trace(AsteroidActuel.name);
AsteroidActuel.x+=AsteroidActuel.VitesseHorizontale;
//si nous atteignons le côté droit de la scene
if (AsteroidActuel.x>=LargeurScene) {
modifierAspectAsteroid(AsteroidActuel,false);
}
//COLLISIONS ===================================
if(AsteroidActuel.hitTestObject(hero))
{
//Je retire l'Asteroid de l'affichage
AsteroidActuel.parent.removeChild(AsteroidActuel);
}
}
Une petite idée ?

Merci d'avance !