IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Plantage au lancement du SWF


Sujet :

ActionScript 3

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    N'avez vous pas un débogueur ? Lancez le code en débogue.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci, j'ai essayé et le débogueur m'a indiqué que c'était la fonction bulle dans Clown.as qui posait problème, à : bulles=new Bulles();
    Apparemment le script se bloque à cet endroit.
    J'ai essayé de réécrire ma fonction bulle mais ça bloque toujours au même endroit. Est-ce que vous comprenez où est le problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public function bulle(ev:Event):void
    {
    	var j:int;
    	var bulles:Bulles;
    	//on parcourt 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]))
    		{
    			var ev:Event;
    			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();
    			}
    		}
    	}
    }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé où était le problème : je crée une liste de poissons (listepoissons2) et je la parcourais à l'endroit avec j++, ça dû provoquer des problèmes (mais je n'arrive pas à comprendre lesquels puisque je ne fais pas de slice dans ce tableau ???). En tous cas, si je la parcours à l'envers c'est nickel.

    Je n'avais pas l'habitude d'utiliser le débogueur, je me contentais de la fenêtre compiler errors et de contrôles dans l'output avec des trace. C'est vachement plus complet le débogueur, merci !

Discussions similaires

  1. [D7] Plantage au lancement
    Par Tcheby dans le forum Langage
    Réponses: 4
    Dernier message: 10/03/2010, 12h20
  2. Plantage si lancement depuis un terminal
    Par Ulath0 dans le forum Débuter
    Réponses: 11
    Dernier message: 23/01/2009, 10h23
  3. Plantage sur lancement cde bcp
    Par scariou29 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/06/2008, 16h24
  4. pb de Flash player 9 au lancement du .swf
    Par amateur_will dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 17/10/2007, 20h53
  5. Réponses: 7
    Dernier message: 20/08/2003, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo