Faire un removeChild sur des balles qui tombent

cs_giulyman Messages postés 14 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 7 avril 2011 - 16 juil. 2009 à 21:35
cs_giulyman Messages postés 14 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 7 avril 2011 - 17 juil. 2009 à 15:27
Bonjour, je fais un jeu en flash le but est de cliquer sur des balles pour les faire disparaitre avant quelles ne touchent le sol. J'ai un soucis au niveau de les supprimer pouvez vous m'aider svp. MERCI


Voici le code :

var cpt=0; // on initialise le compteur à zero

function addmissile(event:Event) {
if (Math.random()*3>2) {
var element: Mcmissile= new Mcmissile();
addChild(element);
element.autorise = true;
element.x=Math.random()*550;
element.y=20;
element.name='missile'+cpt;
element.addEventListener(MouseEvent.MOUSE_DOWN,desamorce);
cpt++;
}
}

stage.addEventListener(Event.ENTER_FRAME,addmissile);

function decendre(Event) {
for (var i=0; i<cpt; i++) {

if (Mcmissile.autorise == true){

var taille = Math.random()*8;
var mcmissile = getChildByName('missile'+i);
mcmissile.y+=taille;
}
}
}
stage.addEventListener(Event.ENTER_FRAME,decendre); // On ajoute un evenement pour faire tomber les missiles sans faire de cliques

function desamorce(evt:MouseEvent) { // fonction qui permet de faire disparaitre les bombes

var nettoyer = getChildByName(evt.target.name);
removeChild(nettoyer);
nettoyer.autorise = false;

}

3 réponses

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
17 juil. 2009 à 13:17
Essaie avec sa :
var nettoyer = getChildByName(evt.currentTarget.name);


-- Orange73 --
0
dj_ouf Messages postés 221 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 6 septembre 2011
17 juil. 2009 à 15:19
Hello

Ton code est un peu étrange si jpeux me permettre

- 1 seul écouter ENTER_FRAME suffit pour faire les différents traitements.
- un écouteur MouseEvent.CLICK est plus approprié.
- pourquoi ne pas utiliser un Timer plutôt que math random dans un boucle enterframe ?

Pour effacer tes balles :
var nettoyer = evt.target as Mcmissile;
getChildByName est très couteux, à prohiber tant que possible.
Et attention à ce que le click ne soit pas récupérer par un de ses enfants.. (mc.mouseChildren = false)
0
cs_giulyman Messages postés 14 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 7 avril 2011
17 juil. 2009 à 15:27
j'avais donné un code modifié, le code de base est celui-ci:

Merci orange73, j'ai essaier mais tj la même erreur.
L'erreur que l'on me donne est celle_ci:

TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at jeu_fla::MainTimeline/decendre()



mon code:

var cpt=0; // on initialise le compteur à zero
var nettoyer=0;

function addmissile(evt:Event) {

var element: Mcmissile= new Mcmissile();

if (Math.random()*3>2) {
addChild(element);
element.x=Math.random()*550;
element.y=15;
element.name='Mcmissile'+cpt;
element.addEventListener(MouseEvent.MOUSE_DOWN,desamorce);
cpt++;
}
}
stage.addEventListener(Event.ENTER_FRAME,addmissile);

function decendre(Event) {
for (var i=0; i<cpt; i++) {
var taille = Math.random()*10;
var mcmissile = getChildByName('Mcmissile'+i);
mcmissile.y+=taille;
}
}
stage.addEventListener(Event.ENTER_FRAME,decendre); // On ajoute un evenement pour faire tomber les missiles sans faire de cliques

function desamorce(evt:MouseEvent) { // fonction qui permet de faire disparaitre les bombes

var nettoyer = getChildByName(evt.target.name);
removeChild(nettoyer);
}
0
Rejoignez-nous