Plantage au lancement du SWF
Bonjour,
Comme exercice d'initiation aux classes, j'ai créé un aquarium.fla qui renvoie aux fichiers Clown.as, Piranha.as et Poisson.as, Poisson étant la super classe de Clown et Piranha. Quand un Clown rencontre un Clown, ils font des bulles. Quand un Piranha rencontre un Clown il le détruit et dis Miam !
J'avais tout fini, ça marchait impec et quand j'ai voulu relancer le fichier SWF quelques jours plus tard le player a planté. Si je veux générer le SWF dans Flash, Flash plante aussi. J'ai pensé à des problèmes d'emplacement de fichier, mais apparemment ce n'est pas ça.
Voici le code d'aquarium.fla :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import flash.display.MovieClip;
import Classes.Poisson;
import Classes.Piranha;
import Classes.Clown;
import flash.events.TimerEvent;
//création d'un poisson de chaque type toutes les 5 secondes
var monTimer:Timer = new Timer(5000);
monTimer.addEventListener(TimerEvent.TIMER,Creer);
monTimer.start();
function Creer(ev:TimerEvent):void
{
var p1:Piranha;
//je crée deux fois plus de clowns pour équilibrer le jeu
var p2:Clown;
var p3:Clown;
//les piranhas arrivent par la gauche
p1 = new Piranha(0,Math.random() * 400);
//les clowns arrivent par la droite
p2 = new Clown(550,Math.random() * 400);
p3 = new Clown(550,Math.random() * 400);
addChild(p1);
addChild(p2);
addChild(p3);
} |
La classe Poisson :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package Classes
{
import flash.display.MovieClip;
import flash.events.Event;
public class Poisson extends MovieClip
{
//création de la liste des poissons, la variable est static pour être partagée par toutes les instances
public static var listePoissons:Array = new Array();
public static var listePoissons2:Array = new Array();
public var vitX,vitY:Number;
public function Poisson(px:Number=0,py:Number=0)
{
this.x = px;
this.y = py;
//à chaque création on ajoute le poisson dans les listes
Poisson.listePoissons.push(this);
Poisson.listePoissons2.push(this);
this.addEventListener(Event.ENTER_FRAME,bouge);
//cet écouteur sera enlevé dans la fonction detruit de la classe clown
}
public function bouge(ev:Event):void
{
stop();
this.x += this.vitX;
//si le poisson touche le bord gauche de l'écran donc x<=0
if (this.x <= 0)
{//à la moitié de la largeur de son corps
this.x = this.width/2;
//on inverse le sens de déplacement
vitX*= -1;
//et on change de frame
this.gotoAndStop(1);
}
//bord de droite à la moitié du corps du poisson
else if (this.x >= stage.stageWidth-this.width/2)
{
//on le ramène au bord
this.x = stage.stageWidth-this.width/2;
//on inverse le sens du déplacement
vitX *= -1;
//et on change de frame
this.gotoAndStop(2);
}
}
}
} |
La classe Clown :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package Classes
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import Classes.Poisson;
public class Clown extends Poisson
{
public function Clown(px:Number=0,py:Number=0)
{
//appelle le constructeur du parent Poisson
super(px,py);
this.vitX = Math.random() * 10 - 5;
this.vitY = Math.random() * 10 - 5;
this.addEventListener(Event.ENTER_FRAME,bulle);
}
//fonction bulle : quand un clown rencontre un clown ils bullent
public function bulle(ev:Event)
{
var j:int;
var bulles:Bulles;
//on parcoure la liste 2 des poissons
//j'ai testé en utilisant la même liste mais ça provoquait des bugs
for (j>=0; j=listePoissons2.length-1; j++)
{
//vérification : que ce n'est pas lui même
//que c'est bien un clown
//qu'il le touche
if (listePoissons2[j] != this && listePoissons2[j] is Clown && this.hitTestObject(listePoissons2[j]))
{
bulles=new Bulles();
addChild(bulles);
bulles.x = 23;
bulles.y = 0;
//bullesTimer : les bulles seront supprimées après 1 secondes
// on crée le timer
var bullesTimer:Timer = new Timer(1000,1);
// on place l'écouteur
bullesTimer.addEventListener(TimerEvent.TIMER, effaceBulles);
// on démarre le timer
bullesTimer.start();
//on crée la fonction qui efface les bulles;
function effaceBulles(ev:Event):void
{
trace ("bulles");
removeChild(bulles);
bullesTimer.stop();
}
}
}
}
//fonction detruit appelée dans la fonction mange de la classe Piranha
public function detruit(ev:Event)
{
//on détruit le clown touché
trace("clown");
parent.removeChild(this);
//on détruit l'écouteur bouge du poisson touché
this.removeEventListener(Event.ENTER_FRAME,bouge);
}
}
} |
Et la classe Piranha :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| package Classes
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import Classes.Poisson;
public class Piranha extends Poisson
{
// constructor code
public function Piranha(px:Number=0,py:Number=0)
{
//appelle le constructeur du parent Poisson
super(px,py);
this.vitX = Math.random() * 5 + 5;
this.vitY = Math.random() * 5 + 5;
this.addEventListener(Event.ENTER_FRAME,mange);
}
public function mange(ev:Event):void
{
var i:int;
var miam:Miam;
//on parcourt la liste des poissons en partant de la fin
for (i=listePoissons.length-1; i>=0; i--)
{
//vérification : que ce n'est pas lui même
//que c'est bien un clown
//qu'il le touche
if (listePoissons[i] != this && listePoissons[i] is Clown && this.hitTestObject(listePoissons[i]))
{
//l'écouteur de la fonction bouge sera retiré dans la fonction detruit de la classe clown;
var ev:Event;
//on affiche miam au-dessus du poisson
miam=new Miam();
addChild(miam);
//miamTimer : le miam sera supprimé après 1 secondes
// on crée le timer
var miamTimer:Timer = new Timer(1000,1);
// on place l'écouteur
miamTimer.addEventListener(TimerEvent.TIMER, effaceMiam);
// on démarre le timer
miamTimer.start();
//on crée la fonction qui efface le miam;
function effaceMiam(ev:Event):void
{
removeChild(miam);
miamTimer.stop();
}
//on appelle la fonction détruit qui est dans la classe Clown
listePoissons[i].detruit(ev);
//on enlève la case vide du tableau;
listePoissons.splice(i,1);
//on retire de la liste le poisson qu'on a touché;
listePoissons[i].parent.removeChild(listePoissons[i]);
}
}
}
}
} |
Quand on a des erreurs de compilation, on peut chercher et s'en sortir, mais là, je suis totalement désemparée. Qu'est-ce qui peut faire planter le programme ?
Merci de votre aide !