Problème en AS3 :: Affichage Array d'objet apres removeChild pour passer au le

Résolu
teut11 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 29 mars 2011 - 29 mars 2011 à 14:00
teut11 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 29 mars 2011 - 29 mars 2011 à 22:06
Bonjour, je débute en programmation AS3 et avance doucement sur un projet de cours. Mon problème est qu'une fois que j'ai fini mon premier niveau, quand je veux réactualiser mon tableau d'objet brick1[Brick] et Bricks2[Brick]. ce tableau reste à zéro et mon code n'affiche aucune erreur.

le problème ce situe après => if (bricks1.length == 0)

Et le tableau qui n'est pas mise à jour dans la fonction pressHandler:


//
// Creation des briques
//


for (var i:int = 0; i < randB; i++){
for (var g:int = 0; g < 12; g++)
{
if(lvl1Code[lvl] == 1){
bricks1.push( new Brick(g * 31 + g * 10 + xPos, yPos,1, ball.width/2));
}
if(lvl1Code[lvl] == 2){
bricks2.push( new Brick(g * 31 + g * 10 + xPos, yPos,2, ball.width/2));
}
lvl++;
}
yPos += 22;
}
for (i = 0; i < bricks1.length; i++){
addChild(bricks1[i]);
}

for (i = 0; i < bricks2.length; i++){
addChild(bricks2[i]);
}


package code
{
/*****************************************
* Casse-briques Application principale
****************************************/
import flash.display.MovieClip; // Car notre classe Cassebriques hérite de MovieClip
import flash.events.*; // Pour gérer les événements ENTER_FRAME
import flash.events.MouseEvent; // Pour gérer les événements CLICK, MOUSE_MOVE
import flash.events.KeyboardEvent; // Pour gérer les événements KEY_DOWN, KEY_UP
import flash.ui.Keyboard; // Contient les codes des touches du clavier
import flash.geom.*; // Définit la classe Point
import flash.ui.*;
import flash.text.TextField; // Affiche texte
import 	flash.media.*;  // Pour le Sound
import flash.net.*;

public class Cassebriques extends MovieClip
{

public var ball:Ball; 
public var raquette:Raquette;
public var vies:Player;
public var started:Boolean = false; // Demarre le jeu
public var Fichier_XML = new XML();
public var hit:Sound;
public var hitChannel:SoundChannel;
public var soundStartable:Boolean = true;	
public var mesVies:Array=[];
private var bricks1:Array=[];  // tableau d'affichage des bricks1
private var bricks2:Array=[];  // tableau d'affichage des bricks2
public var wall:Array;

public const direction:Number=1.56;


public const vitesseraquette:Number=8;

public var LEFT:Boolean=false;
public var RIGHT:Boolean=false;
public var clavier:Boolean=false;
public var key:Number;

public var yPos:Number = 25;
public var xPos:Number = 25;
public const randB:int = 10;	


public var lvl:int=0;
public var iscore:int=0; // Incrementation des points par bricks cassé
public var lvl1Code:Array = new Array(  2,2,2,2,0,0,0,0,2,2,2,2,				                        2,1,1,1,1,2,2,1,1,1,1,2,
1,1,1,1,1,2,2,1,1,1,1,1,
0,0,0,0,2,2,2,2,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
2,0,0,0,0,1,1,0,0,0,0,2,
2,2,0,0,1,1,1,1,0,0,2,2,
0,0,0,1,1,1,1,1,1,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1										);

public var lvl2Code:Array = new Array(	0,0,0,0,0,0,0,0,0,0,0,0,							0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,2,0,0,2,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
2,0,0,0,1,1,0,0,0,2,0,0,
2,0,0,0,0,0,0,0,0,2,0,0,
1,1,0,1,1,1,1,0,1,1,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1
);

public function Cassebriques()
// Evenement Listener
{	
stop();
btn_start.addEventListener(MouseEvent.CLICK,pressHandler);
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyReleaseHandler);
}
protected function enterFrameHandler(event:Event):void
// Gére : Evenement Listener
{	
if (started)
{
stop();
Mouse.hide();
moveBall(ball);
movePaddle(raquette);

}	
}
public function movePaddle(r:Raquette):void
// Traitement des deux types de jeux (clavier ou sourie):Boolean
{	
if(clavier){
if(RIGHT true ||  LEFT true)
raquette.deplaceKeyboard(vitesseraquette,key);
}

if(!clavier){
clavier=false;
r.deplaceMouse(mouseX-r.width/2);
}
}		

protected function keyPressHandler(event:KeyboardEvent):void
// Lecture au clavier si appuyer
{		

switch (event.keyCode){
case Keyboard.RIGHT:
clavier=true
RIGHT=true;
key=39;
break;
case Keyboard.LEFT:
clavier=true
LEFT=true;
key=37;
break;
default :
clavier =false;
break;

}
}
protected function keyReleaseHandler(event:KeyboardEvent):void
// Arrete la lecture si relacher au clavier
{				 
switch (event.keyCode){
case Keyboard.RIGHT:
RIGHT=false;
break;
case Keyboard.LEFT:
LEFT=false;
break;
default :
clavier =false;
break;

}
}	
public function moveBall(b:Ball):void
// Gestion des rebond de la balle sur les obstacles
{	

var obstacle:Boolean = false; // Sauvegarde si un obstacle faire first la boucle
var arebondi:Boolean = false; // Sauvegarde si rebond
var testR:int = 0; // Variables d'incrémentation
var tR:int=0; // Variables d'incrémentation
var nB:int=0; // Variables d'incrémentation
var d:Number; // Si point calcule d^2=(px-bx)^2+(py-by)^2 (segment le plus proche du point => Pythagore)
var viesBr:Number; // Si il y a intersection sauvegarde position dans le array pour les briques de type 1
var dminB1:Number=100000; // Si il y a intersection pour les briques de type 1
var dminB2:Number=100000; // Si il y a intersection pour les briques de type 2
var dminV:Number=100000;  // Si il y a intersection pour les lifes
var point:Point= new Point(); // Recuperation du point intersegment
// 
// Si il y a un rebond faire ce qui suit
// 
do{
obstacle=false;
dminB1=100000;
dminB2=100000;
dminV=100000;
// 
// Gestion des walls
// 	
if (
b.isrebound(new Point(raquette.x-b.width/2, raquette.y-b.height/2), 
new Point(raquette.x+raquette.width+b.width/2, raquette.y-b.height/2),direction) ||// Wall Paddle + ball direction
b.isrebound(wall[0], wall[1])|| // Wall TOP
b.isrebound(wall[2], wall[3])|| // Wall LEFT
b.isrebound(wall[4], wall[5])/*|| // Wall RIGHT
b.isrebound(wall[6], wall[7]) */ // Wall BOTTOM
)
{ // si la balle rebondi sur l&#8217;obstable
hit = new Hit1();
hitChannel = hit.play();	
obstacle=true; // on note qu&#8217;il y a eu un rebond
arebondi = obstacle;
}

// 
// traitement des vies
// 
for (testR=0; testR<mesVies.length; testR++){
point = b.intersectsegments(new Point(b.x,b.y),b.nextpos(),wall[6],wall[7]);
if(point)
{
d=(b.x-point.x)*(b.x-point.x)+(b.y-point.y)*(b.y-point.y);
if (d<dminV) {
dminV=d;
}
}
}
if (dminV<100000){
removeChild(mesVies[mesVies.length-1]);
mesVies.splice(mesVies.length-1,1);
removeChild(ball);
ball= new Ball();
addChild(ball);	
ball.place(260,340,1.75);

if(mesVies.length == 0){
removeChild(ball);
removeChild(raquette);
started=false;
for(tR=0; tR<bricks1.length; tR++){
removeChild(bricks1[tR]);
}
for(tR=0; tR<bricks2.length; tR++){
removeChild(bricks2[tR]);
}
bricks1.splice(0,bricks1.length);
bricks2.splice(0,bricks2.length);
gotoAndStop("perduJeu");
Score.text = String(vies.Score(iscore));
Mouse.show();
}
}
// 
// traitement des bricks de typpe 1
// 	
for (var br:int=0; br<bricks1.length; br++) {
testR=0;
do{
point = b.intersectsegments(new Point(b.x,b.y),b.nextpos(),bricks1[br].bords[testR],bricks1[br].bords[testR+1]);
if(point)
{
d=(b.x-point.x)*(b.x-point.x)+(b.y-point.y)*(b.y-point.y);
if (d<dminB1) {
dminB1=d;
tR=testR;
nB=br;
}
}
testR +=2;
} while (testR<bricks1[br].bords.length)
}
if (dminB1<100000){
if (b.isrebound(bricks1[nB].bords[tR],bricks1[nB].bords[tR+1])){
obstacle=true; // on note qu&#8217;il y a eu un rebond
arebondi = obstacle;
hit = new Hit3();
hitChannel = hit.play();							
if (bricks1[nB].touche()) {
removeChild(bricks1[nB]);
bricks1.splice(nB,1);
hit = new Step();
hitChannel = hit.play();								
hit = new Step();
hitChannel = hit.play();
Score.text = String(vies.Score(iscore));
}
else{
Score.text = String(iscore+=25);
}
if (bricks1.length == 0){ // Parti gagner
removeChild(ball);
removeChild(raquette);
started=false;
for(tR=0; tR<bricks2.length; tR++){
removeChild(bricks2[tR]);
}
bricks1.splice(0,bricks1.length);
bricks2.splice(0,bricks2.length);
gotoAndStop("arreteJeu");
Mouse.show();
btn_start.addEventListener(MouseEvent.CLICK,pressHandler);
lvl1Code = lvl2Code;
}
}
}
// 
// traitement des bricks de typpe 2
// 		
for (var br2:int=0; br2<bricks2.length; br2++){
testR=0;
do{
point = b.intersectsegments(new Point(b.x,b.y),b.nextpos(),bricks2[br2].bords[testR],bricks2[br2].bords[testR+1]);
if(point)
{
d=(b.x-point.x)*(b.x-point.x)+(b.y-point.y)*(b.y-point.y);
if (d<dminB2) {
dminB2=d;
tR=testR;
nB=br2;
}
}
testR+=2;
} while (testR<bricks2[br2].bords.length)

}
if (dminB2< 100000){
if (b.isrebound(bricks2[nB].bords[tR],bricks2[nB].bords[tR+1])){
hit = new Hit2();
hitChannel = hit.play();	
obstacle=true; // on note qu&#8217;il y a eu un rebond
arebondi = obstacle;
}
}
} while (obstacle)

if ( arebondi ){
b.findeplace(); // s'il y a eu au moins un rebond, finir le déplacement
}
else{
b.deplace(); // avance la balle simplement
}
}	

protected function pressHandler(event:MouseEvent):void
{				

started=true;
gotoAndStop("demarreJeu");

//
// Creation de la balle
//
ball= new Ball();
addChild(ball);	
ball.place(260,340,1.75);
//
// Creation de la raquette
//

raquette = new Raquette();
raquette.place(260,370);
addChild(raquette);


//
// Creation du mur
// 

wall = [new Point (20+ball.height/2,20+ball.height/2),  new Point (520-ball.height/2,20+ball.height/2), 	// Wall TOP
new Point (20+ball.height/2,20+ball.height/2),  new Point (20+ball.height/2,380-ball.height/2), 	// Wall LEFT
new Point (520-ball.height/2,20+ball.height/2), new Point (520-ball.height/2,380-ball.height/2), 	// Wall RIGHT
new Point (20+ball.height/2,380-ball.height/2), new Point (520-ball.height/2,380-ball.height/2)];	// Wall BOTTOM

// 
// Creation des briques
// 


for (var i:int = 0; i < randB; i++){
for (var g:int = 0; g < 12; g++)
{
if(lvl1Code[lvl] == 1){
bricks1.push( new Brick(g * 31 + g * 10 + xPos, yPos,1, ball.width/2));
}
if(lvl1Code[lvl] == 2){
bricks2.push( new Brick(g * 31 + g * 10 + xPos, yPos,2, ball.width/2));
}
lvl++;
}
yPos += 22;
}
for (i = 0; i < bricks1.length; i++){
addChild(bricks1[i]);
}		

for (i = 0; i < bricks2.length; i++){
addChild(bricks2[i]);
}
// 
// Creation des vies
// 
var randV:int = 8;
xPos=0;
for ( i = 0; i < randV; i++){
vies = new Player(80+xPos,10);
mesVies.push(vies);
xPos+=20;
}
for (i = 0; i < mesVies.length; i++){
addChild(mesVies[i]);
}			
 
}



}
}



Si quelqu'un peut m'éclairer un peu se serait cool ! Merci d'avance

5 réponses

teut11 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 29 mars 2011
29 mars 2011 à 22:06
Bon j'ai trouvé mon problème seul ! Merci quand même pour vos conseil, bien que peut utile pour moi ...

En réalité j'avais par erreur instancié des variable en public :


public var yPos:Number = 25;
public var xPos:Number = 25;
public const randB:int = 10;`


Que j'aurais dû mettre directement dans ma fonction ...

Pour te répondre "aerolyte" ma classe est dans le même package que les autres classe (package code{...)
Il n'y a donc pas besoin d'importation de cette classe enfant de ma classe mère ...
Je sais pas comment c'était en AS2 mais en AS3 ça se passe comme ça !!! Enfin c'est comme ça que j'ai appris en cours ... Tu as surement confondu certaine chose ou je sais pas trop quoi ...

Bonne soirée à vous tous.
Sincèrement votre
3
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 15:11
Bonjour,

Normal
bricks1.push( new Brick());

Comme cela n'est pas une classe, tu ne risque pas de faire grand chose avec
0
teut11 Messages postés 4 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 29 mars 2011
29 mars 2011 à 15:58
bien j'allais pas mettre toute mes classe dans le sujet ! Ma classe Brick est la suivante :
Et tout marche pour la premiere création de mon tableau level1, c'est le passage au level2 qui pose problème ...

Merci, pour ton aide ;)

package code
{
import flash.display.Sprite;
import flash.display.MovieClip; // Car notre classe Cassebriques hérite de MovieClip
import flash.events.Event; // Pour gérer les événements ENTER_FRAME
import flash.geom.*; // Définit la classe Point
import flash.ui.*;
import flash.text.TextField;

public class Brick extends MovieClip
{

//*************************
// Properties:
public var bords:Array= new Array;
public var vie:Number=3;
public var i:Number=1;


//*************************

public function Brick(nx:Number, ny:Number, numBrick:int, ballW:int=6)
{
if(numBrick == 1){
gotoAndStop("Vies1");
}
if(numBrick == 2){
gotoAndStop("incassable");
}
this.graphics.beginFill(0x042D00,0.4);
this.graphics.drawRect(2,2, width, height);
this.graphics.beginFill(0x042D00,0.3);
this.graphics.drawRect(2,2, width-0.5, height-0.5);

this.x = nx;
this.y = ny;

bords = [
 new Point (x-ballW,y-ballW), //Segment Brick Top
 new Point (x+ballW+width,y-ballW), //Segment Brick Top
 new Point (x-ballW,y+height+ballW), //Segment Brick Bottom
 new Point (x+ballW+width,y+height+ballW), //Segment Brick Bottom
 new Point (x-ballW,y-ballW), //Segment Brick Left
 new Point (x-ballW,y+height+ballW), //Segment Brick Left
 new Point (x+ballW+width,y-ballW), //Segment Brick Right
 new Point (x+ballW+width,y+height+ballW)]; //Segment Brick Right

}
public function traitement() : Boolean
{

return true;
}
public function touche() : Boolean
{

vie--;
if (vie>0) {
i++;
gotoAndStop("Vies"+i);
return false;
}
return true;
}


}
}
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
29 mars 2011 à 16:14
Explication pour aerolyte : une classe de même package n'a pas besoin d'import pour être utilisée lors de la compilation.
Une classe peut aussi être utilisée directement avec son package sans import : new monPackage.maClass();

Peg'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 16:38
Merci Pégase, bien que cela fasse longtemps que je ceci n'est plus inconnu pour moi

Ceci dit, je pense que c'est une erreur de ne pas l'importer; pour des projets plus important c'est nettement plus transparent de pourvoir vérifier rapidement la hierachie sur chaque debut de classe.
0
Rejoignez-nous