Bonjour, voilà mon problème, je tente de faire une classe Missiles qui doit reconnaître mes Antagonistes. Une fois le missile lancé, il doit supprimer l'antagoniste et l'enlever du tableau antagoniste qui est stocké dans la classe Jeu. L'objet missile est instancié grâce à l'avatar une fois la touche SPACE enfoncé.
Le problème est le suivant : flash me dit que mon hitTestObject ne doit pas être vide. Pourtant, j'y ai mis mes antagonistes. Si quelqu'un avait la patience et le temps d'analyser mon code et de m'expliquer mon erreur, se serait sympas. Merci!
Voici mes classes :
JEU
AVATAR
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217 package { import ca.qc.cegepstefoy.*; import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; import flash.geom.Point; public class Jeu extends MovieClip { private var avatar:Avatar; private var energie:Energie; private var tAntagonistes:Array=new Array(); private var tObstacles:Array=new Array(); private var tCitrouilles:Array=new Array(); private var tRadis:Array=new Array(); private var tVies:Array=new Array(); private var tMissiles:Array=new Array(); private var maMinuterie:Timer = new Timer(50,0); private var point:uint = 1; private var nombreHasard:uint = Math.floor(Math.random() * 1 + 9); private var maMinuterieEnnemi:Timer = new Timer(4000,nombreHasard); private var maMinuterieObstacles:Timer = new Timer(6000,nombreHasard); private var maMinuterieCitrouilles:Timer = new Timer(5000,0); private var maMinuterieRadis:Timer = new Timer(3000,0); private var monScenario:MovieClip; public function Jeu () { //this.tAntagonistes[0]= new Antagoniste(this.monScenario,this.maMinuterie); this.ajouterAvatar (); this.tCitrouilles.push ( new Citrouille(this)); this.tRadis.push ( new Radis(this)); this.ajouterEnergie (); this.ajouterVies (); this.maMinuterieEnnemi.addEventListener (TimerEvent.TIMER,this.ajouterAntagoniste); this.maMinuterieObstacles.addEventListener (TimerEvent.TIMER,this.ajouterObstacles); this.maMinuterieRadis.addEventListener (TimerEvent.TIMER,this.ajouterRadis); this.maMinuterieCitrouilles.addEventListener (TimerEvent.TIMER,this.ajouterCitrouilles); this.maMinuterie.addEventListener (TimerEvent.TIMER,classerObjetsParY); this.maMinuterieRadis.start (); this.maMinuterieCitrouilles.start (); this.maMinuterieEnnemi.start (); this.maMinuterieObstacles.start (); this.maMinuterie.start (); Antagoniste.ajusterVitesse (); Obstacles.ajusterVitesse (); Citrouille.ajusterVitesse (); Radis.ajusterVitesse (); }//fin fonction Jeu /**************************AJOUT DES OCCURENCES******************************************************/ private function ajouterAntagoniste (evenement:TimerEvent):void { this.tAntagonistes.push ( new Antagoniste(this)); }//fin fonction ajouterAntagoniste private function ajouterObstacles (evenement:TimerEvent):void { this.tObstacles.push ( new Obstacles(this)); }//fin fonction ajouterObstacles private function ajouterCitrouilles (evenement:TimerEvent):void { this.tCitrouilles.push ( new Citrouille(this)); }//fin fonction ajouterCitrouilles private function ajouterRadis (evenement:TimerEvent):void { this.tRadis.push ( new Radis(this)); }//fin fonction ajouterRadis /**/ private function ajouterAvatar ():void { this.avatar = new Avatar(this,this.tAntagonistes,this.tObstacles,this.tMissiles); }//fin function ajouterAvatar private function ajouterEnergie ():void { this.energie = new Energie(this); }//fin function ajouterEnergie private function ajouterVies ():void { this.tVies[0] = new Vies(this,60,80); this.tVies[1] = new Vies(this,90,80); this.tVies[2] = new Vies(this,120,80); this.tVies[3] = new Vies(this,150,80); this.tVies[4] = new Vies(this,180,80); }//fin function ajouterVies /*********************SUPPRESSION ANTAGONISTES***************************************************/ private function supprimerAntagoniste ():void { this.maMinuterieEnnemi.removeEventListener (TimerEvent.TIMER,this.ajouterAntagoniste); for (var cpt:uint=0; cpt<=this.tAntagonistes.length; cpt++) { this.tAntagonistes[cpt].supprimerAntagoniste (); } this.tAntagonistes.splice (0,this.tAntagonistes.length); } public function enleverAntagonisteTableau (refAnta:MovieClip):void { var antagoniste = this.tAntagonistes.indexOf(refAnta); this.tAntagonistes.splice (antagoniste,1); trace(this.tAntagonistes) } /***********************SUPPRESSION OBSTACLE**********************************************/ private function supprimerObstacles ():void { this.maMinuterieObstacles.removeEventListener (TimerEvent.TIMER,this.ajouterObstacles); for (var cpt:uint=0; cpt<=this.tObstacles.length; cpt++) { this.tObstacles[cpt].supprimerObstacles (); } this.tObstacles.splice (0,this.tObstacles.length); } public function enleverObstaclesTableau (refObsta:MovieClip):void { var obstacles = this.tObstacles.indexOf(refObsta); this.tObstacles.splice (obstacles,1); } /***********************SUPPRESSION CITROUILLES******************************************************/ private function supprimerCitrouilles ():void { this.maMinuterieCitrouilles.removeEventListener (TimerEvent.TIMER,this.ajouterCitrouilles); for (var cpt:uint=0; cpt<=this.tCitrouilles.length; cpt++) { this.tCitrouilles[cpt].supprimerCitrouilles (); } this.tCitrouilles.splice (0,this.tCitrouilles.length); } public function enleverCitrouillesTableau (refCit:MovieClip):void { var citrouilles = this.tCitrouilles.indexOf(refCit); this.tCitrouilles.splice (citrouilles,1); } /**********************SUPPRESSION RADIS*********************************************************/ private function supprimerRadis ():void { this.maMinuterieRadis.removeEventListener (TimerEvent.TIMER,this.ajouterRadis); for (var cpt:uint=0; cpt<=this.tRadis.length; cpt++) { this.tRadis[cpt].supprimerRadis (); } this.tRadis.splice (0,this.tRadis.length); } public function enleverRadisTableau (refRadis:MovieClip):void { var radis = this.tRadis.indexOf(refRadis); this.tRadis.splice (radis,1); } /**********************SUPPRESSION MISSILES*********************************************************/ public function enleverMissilesTableau (refMissile:MovieClip):void { var missiles = this.tMissiles.indexOf(refMissile); this.tMissiles.splice (missiles,1); } /**********************SUPPRESSION ENERGIE*********************************************************/ private function supprimerEnergie ():void { this.energie.supprimerEnergie (); } /******************************GESTION BARRE DE VIE ET POINTS DE VIE*********************************************************/ public function faireSuppEnergie () { this.point += 1; this.energie.enleverEnergie (this.point); if (this.point==9) { this.point=1; this.enleverVie (); this.energie.enleverEnergie (this.point); } } private function enleverVie () { this.tVies.splice (this.tVies.length, 1); var vie:Number=tVies.length-1; this.tVies[vie].supprimerVies (); } /*********************************************SWAPPING******************************************/ private function classerObjetsParY (evenement:TimerEvent):void { //crée une liste temporaire qui servira au tri des objects à l'écran var maListeTriee:Array=new Array(); //insère l'avatar dans la liste maListeTriee.push (this.avatar); maListeTriee=maListeTriee.concat(this.tAntagonistes);//duplique maListeTriee=maListeTriee.concat(this.tCitrouilles); maListeTriee=maListeTriee.concat(this.tObstacles); maListeTriee=maListeTriee.concat(this.tRadis); //trace (maListeTriee); maListeTriee=maListeTriee.sortOn("y",Array.NUMERIC); for (var i=0; i<maListeTriee.length; i++) { this.setChildIndex (maListeTriee[i], i+4); } //trace("apres reset profondeur"); } public function getMinuterie ():Timer { return this.maMinuterie; } }//fin classe }//fin pkg
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.events.*; import flash.ui.Keyboard; import flash.utils.Timer; import flash.geom.Point; public class Avatar extends ObjetVisible { private var mesAntagonistes:Array = new Array ; private var mesObstacles:Array = new Array ; private var mesMissiles:Array=new Array; private var tTouches:Array = new Array(false,false,false,false); private var maMinuterie:Timer = new Timer(30,0); private const POSITION_DEPART = new Point(50,380); private const LIMITE_DEPLACEMENT_Y = new Point(380,550); private const VITESSE_AVATAR = 5; private var missiles:Array=new Array; public function Avatar (refScenario:MovieClip,refAntagonistes:Array, refObstacles:Array, refMissiles:Array) { super (refScenario); this.mesAntagonistes = refAntagonistes; this.mesObstacles = refObstacles; this.mesMissiles = refMissiles; this.maMinuterie.start(); this.x = POSITION_DEPART.x; this.y = POSITION_DEPART.y; this.scaleY = this.y / LIMITE_DEPLACEMENT_Y.y * 0.9; this.scaleX = this.y / LIMITE_DEPLACEMENT_Y.y * 0.9; refScenario.stage.addEventListener (KeyboardEvent.KEY_DOWN,this.changerTableauDown); refScenario.stage.addEventListener (KeyboardEvent.KEY_UP,this.changerTableauUp); this.maMinuterie.addEventListener (TimerEvent.TIMER,this.detecterCollision); }//fin fonction Avatar private function changerTableauDown (evenement:KeyboardEvent):void { switch (evenement.keyCode) { case Keyboard.RIGHT : this.tTouches[0] = true; break; case Keyboard.LEFT : this.tTouches[1] = true; break; case Keyboard.UP : this.tTouches[2] = true; break; case Keyboard.DOWN : this.tTouches[3] = true; break; case Keyboard.SPACE : this.mesMissiles.push (new Missiles(this,this.scn,this.x,this.y, this.mesAntagonistes)); break; } if (this.maMinuterie.running == false) { this.maMinuterie.addEventListener (TimerEvent.TIMER,this.deplacer); this.maMinuterie.start (); } }//fin fonction changerTableauDown private function changerTableauUp (evenement:KeyboardEvent):void { switch (evenement.keyCode) { case Keyboard.RIGHT : this.tTouches[0] = false; break; case Keyboard.LEFT : this.tTouches[1] = false; break; case Keyboard.UP : this.tTouches[2] = false; break; case Keyboard.DOWN : this.tTouches[3] = false; break; } this.gotoAndStop("marche"); if (this.tTouches.indexOf(true) == -1) { this.maMinuterie.stop (); this.maMinuterie.removeEventListener (TimerEvent.TIMER,this.deplacer); } }//fin fonction changerTableauUp private function deplacer (evenement:TimerEvent):void { var deplacement:Number = 0; if (this.tTouches[0] == true) { this.x += 5; this.gotoAndStop("cours"); } if (this.tTouches[1]==true) { this.x-=5; this.gotoAndStop("recule"); } if (this.tTouches[2]==true) { deplacement=this.y-VITESSE_AVATAR; } if (this.tTouches[3]==true) { deplacement=this.y+VITESSE_AVATAR; } if (deplacement>LIMITE_DEPLACEMENT_Y.x&&deplacement<LIMITE_DEPLACEMENT_Y.y) { //déplacer l'avatar this.y=deplacement; //remettre à l'échelle this.scaleY=this.y/LIMITE_DEPLACEMENT_Y.y*0.9; this.scaleX=this.y/LIMITE_DEPLACEMENT_Y.y*0.9; } }//fin fonction deplacer private function detecterCollision (evenement:TimerEvent):void { var collisionAnta:Boolean=false; var collisionObstacle:Boolean=false; /*DÉTECTION ANTAGONISTE*/ for (var cptA:uint=0; cptA<this.mesAntagonistes.length && collisionAnta==false; cptA++) { if (this.hitTestObject(this.mesAntagonistes[cptA])) { collisionAnta=true; this.mesAntagonistes[cptA].supprimerAntagoniste (); //this.mesAntagonistes.splice (cptA,1);//premier nombre est l'index, le deuxième nombre est la longueur qu'on veut supprimer this.scn.faireSuppEnergie (); } } /*DÉTECTION OBSTACLES*/ for (var cptO:uint=0; cptO<this.mesObstacles.length && collisionObstacle==false; cptO++) { if (this.hitTestObject(this.mesObstacles[cptO])) { collisionObstacle=true; this.mesObstacles.splice (cptO,1);//premier nombre est l'index, le deuxième nombre est la longueur qu'on veut supprimer this.scn.faireSuppEnergie (); } } }//fin fonction detecterCollision public function supprimerAvatar ():void { this.scn.stage.removeEventListener (KeyboardEvent.KEY_DOWN,this.changerTableauDown); this.scn.stage.removeEventListener (KeyboardEvent.KEY_UP,this.changerTableauUp); this.supprimerObjet (); }//fin fonction supprimerAvatar }//fin classe }//fin pkg
ANTAGONISTES
MISSILES
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Antagoniste extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer; public function Antagoniste (refScenario:MovieClip) { super (refScenario); this.maMinuterie= refScenario.getMinuterie(); //this.scn=refScenario; this.maMinuterie.addEventListener (TimerEvent.TIMER,this.bouger); this.x = 800; this.y = Math.floor(Math.random()*150+400); }//fin fonction Antagoniste private function bouger (evenement:TimerEvent):void { this.x -= Antagoniste.vitesse; if (this.x<=0) { this.supprimerAntagoniste (); } }//fin fonction bouger public static function ajusterVitesse ():void { Antagoniste.vitesse=10; }// fin fonction ajusterVitesse public function supprimerAntagoniste ():void { this.scn.enleverAntagonisteTableau(this); this.maMinuterie.removeEventListener (TimerEvent.TIMER,this.bouger); this.supprimerObjet (); }//fin fonction supprimerAntagoniste }//fin classe }//fin pkg
ENERGIE
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; import fl.transitions.Tween; import fl.transitions.TweenEvent; import fl.transitions.easing.*; public class Missiles extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer = new Timer(50,1); private var mesAntagonistes:Array = new Array ; private var trajX:Tween; private var trajY:Tween; public function Missiles (avatar:Avatar, refScenario:MovieClip, refX:uint, refY:uint, antagonistes:Array) { super (refScenario); this.x = refX; this.y = avatar.y - 50; this.mesAntagonistes = antagonistes; this.maMinuterie.addEventListener (TimerEvent.TIMER,this.lancerMissiles); this.maMinuterie.addEventListener (TimerEvent.TIMER,this.detecterCollision); this.maMinuterie.start (); } //Fin fonction Missile private function lancerMissiles (evenement:TimerEvent) { this.trajX = new Tween(this,"x",Regular.easeOut,this.x,this.x + 500,2,true); this.trajY = new Tween(this,"y",Bounce.easeOut,this.y,this.y + 30,2,true); trajX.addEventListener (TweenEvent.MOTION_FINISH, supprimerMissiles); }//fin function lancerMissiles private function detecterCollision (evenement:TimerEvent) { //trace("Détecter Collision"); //var collisionAnta:Boolean = false; for (var cptA:uint=0; cptA<=this.mesAntagonistes.length /*&& collisionAnta==false*/; cptA++) { //trace (this.mesAntagonistes[cptA]) if (this.hitTestObject(this.mesAntagonistes[cptA])) { //collisionAnta = true; //trace(this.mesAntagonistes + "avant suppression"); this.mesAntagonistes[cptA].supprimerAntagoniste (); //trace (this.mesAntagonistes+"Anta deleté"); } } }//fin détecterCollision public function supprimerMissiles (evenement:TweenEvent):void { this.trajX = null; this.trajY = null; this.supprimerObjet (); this.scn.enleverMissilesTableau (this); }//fin fonction supprimerMissiles }//fin classe }//fin pkg
CITROUILLES
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Energie extends ObjetVisible { public function Energie (refScenario:MovieClip) { super (refScenario); this.x =225; this.y = 100; }//fin fonction Energie /********************ENLEVER ENERGIE************************/ public function enleverEnergie(point){ this.gotoAndStop(point); }//fin fonction enleverEnergie public function supprimerEnergie ():void { this.supprimerObjet (); }//fin fonction supprimerCitrouille }//fin classe }//fin pkg
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Citrouille extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer; public function Citrouille (refScenario:MovieClip) { super (refScenario); this.maMinuterie= refScenario.getMinuterie(); this.maMinuterie.addEventListener (TimerEvent.TIMER,this.bouger); this.x = 950; this.y = 340; }//fin fonction Citrouille private function bouger (evenement:TimerEvent):void { this.x -= Citrouille.vitesse; if (this.x<=0) { this.scn.enleverCitrouillesTableau(this); this.supprimerCitrouilles (); } }//fin fonction bouger public static function ajusterVitesse ():void { Citrouille.vitesse=3; }// fin fonction ajusterVitesse /********************************POUR LE SWAPING*****************/ public function supprimerCitrouilles ():void { this.maMinuterie.removeEventListener (TimerEvent.TIMER,this.bouger); this.supprimerObjet (); }//fin fonction supprimerCitrouille }//fin classe }//fin pkg
OBJET VISIBLE
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 package ca.qc.cegepstefoy{ import flash.events.*; import flash.display.MovieClip; import flash.utils.Timer; public class ObjetVisible extends MovieClip { protected var scn:MovieClip=null; public function ObjetVisible (refScene) { this.scn=refScene refScene.addChild (this); } public function supprimerObjet () { this.scn.removeChild (this); } } }
RADIS
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Radis extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer; public function Radis (refScenario:MovieClip) { super (refScenario); this.maMinuterie= refScenario.getMinuterie(); this.maMinuterie.addEventListener (TimerEvent.TIMER,this.bouger); this.x = 975; this.y = 375; }//fin fonction Radis private function bouger (evenement:TimerEvent):void { this.x -= Radis.vitesse; if (this.x<=0) { this.scn.enleverRadisTableau(this); this.supprimerRadis (); } }//fin fonction bouger public static function ajusterVitesse ():void { Radis.vitesse=3; }// fin fonction ajusterVitesse public function supprimerRadis ():void { this.maMinuterie.removeEventListener (TimerEvent.TIMER,this.bouger); this.supprimerObjet (); }//fin fonction supprimerRadis }//fin classe }//fin pkg
VIES
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Vies extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer; public function Vies (refScenario:MovieClip, refX:uint, refY:uint) { super (refScenario); this.maMinuterie= refScenario.getMinuterie(); this.x =refX; this.y = refY; } //Fin fonction Vies public function supprimerVies():void { this.supprimerObjet (); }//fin fonction supprimerCitrouille }//fin classe }//fin pkg
OBSTACLES
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 package ca.qc.cegepstefoy{ import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Obstacles extends ObjetVisible { private static var vitesse:uint; private var maMinuterie:Timer; public function Obstacles (refScenario:MovieClip) { super (refScenario); this.maMinuterie= refScenario.getMinuterie(); this.maMinuterie.addEventListener (TimerEvent.TIMER,this.bouger); this.x = 800; this.y = Math.floor(Math.random()*150+400); }//fin fonction Obstacles private function bouger (evenement:TimerEvent):void { this.x -= Obstacles.vitesse; if (this.x<=0) { this.scn.enleverObstaclesTableau(this); this.supprimerObstacles (); } }//fin fonction bouger public static function ajusterVitesse ():void { Obstacles.vitesse=4; }// fin fonction ajusterVitesse public function supprimerObstacles ():void { this.maMinuterie.removeEventListener (TimerEvent.TIMER,this.bouger); this.supprimerObjet (); }//fin fonction supprimerObstacles }//fin classe }//fin pkg
Partager