Ich machte ein Spiel mit AS3, wo Sie auf fallende Bomben klicken müssen, bevor sie explodieren und eine Mauer zerstören. Jetzt versuche ich, die Bomben zu entfernen, die gerade gefallen sind, als die Wand zerstört wurde, also habe ich eine removeChild(blob)
in meiner Spielüber-Funktion gemacht, da diese Bomben mit einer addChild(blob)
auf der Bühne hinzugefügt werden, und ich bekomme diesen Fehler:AS3 Fehler 2025 removechild
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. ...line 80
... und übrigens, ich habe bereits versucht, Dinge wie diese:
this.parent.removeChild(this);
oder
blob.parent.removeChild(blob);
oder
stage.removeChild(blob);
aber ich bekomme immer noch den gleichen Fehler.
Hier ist mein Code:
package cem {
import flash.geom.*;
import flash.display.*;
import flash.events.*;
import flash.display.MovieClip;
import flash.utils.Timer;
public class Jeu extends MovieClip {
//Variables publiques
var decor: MovieClip = new Decor();
var chrono: cem.Chronometre;
var nextObject: Timer = new Timer(800, 0);
var _menu: MovieClip = new Menu();
var _btnJouer: MovieClip = new BoutonJouer();
var blob: cem.Blob;
var score: Score;
public function Jeu() {
// constructor code
//***********************************************Mettre menu***********************************************//
addChild(_menu);
addChild(_btnJouer);
_btnJouer.x = 500;
_btnJouer.y = 500;
_btnJouer.addEventListener(MouseEvent.CLICK, jouer);
}
//*****************************************************Jouer**************************************************//
function jouer(e: MouseEvent) {
removeChild(_menu);
addChild(decor);
decor.gotoAndStop(1);
chrono = new cem.Chronometre();
addChild(chrono);
chrono.demarrer();
score = new Score();
score.x = 600;
nextObject.addEventListener(TimerEvent.TIMER, creerBlobs);
nextObject.start();
}
//**************************************************Créer Bombes***********************************************//
function creerBlobs(e: TimerEvent) {
blob = new cem.Blob();
blob.x = Math.floor(Math.random() * (stage.stageWidth - blob.width));
addChild(blob);
blob.gotoAndStop(1);
blob.addEventListener("explosion", perdreVies);
}
//************************************************Perdre des vies*********************************************//
public function perdreVies(e: Event) {
decor.moinsVie();
decor.addEventListener("gameisover", _gameOver);
}
//************************************************Partie terminée*********************************************//
public function _gameOver(e: Event) {
blob.removeEventListener("explosion", perdreVies);
removeChild(blob);
chrono.arret();
addChild(_menu);
addChild(_btnJouer);
nextObject.stop();
nextObject.removeEventListener(TimerEvent.TIMER, creerBlobs);
nextObject.removeEventListener(TimerEvent.TIMER, creerBlobs);
addChild(score);
score.affichageScore.text = "votre score: " + chrono.secondes * 1000;
}
}
}
Ich glaube, Sie sind auf dem richtigen Weg entfernen. –
Setzen Sie stattdessen die Blobs in ein Array, während Sie sie erstellen, und durchlaufen Sie dann das Array, um jedes durch eine Indexnummer anstelle eines Variablenverweises zu zerstören. –