AS3 错误 2025 removechild
AS3 error 2025 removechild
我用 AS3 制作了一个游戏,你必须在落下的炸弹爆炸并摧毁一堵墙之前点击它。现在,我正试图移除在墙被摧毁时掉落的炸弹,所以我在我的游戏结束函数中做了一个 removeChild(blob)
,因为这些炸弹是用 addChild(blob)
添加到舞台上的,我不断收到此错误:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. ...line 80
...顺便说一句,我已经尝试过这样的事情:
this.parent.removeChild(this);
或
blob.parent.removeChild(blob);
或
stage.removeChild(blob);
但我仍然得到同样的错误。
这是我的代码:
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;
}
}
}
var name blob 一次只能引用一个特定的 Blob 对象。
每次您创建一个新的 Blob 时,您都会将名称 blob 重新分配给最后创建的那个,失去对前一个的引用。
该错误表明,在您调用 removeChild 时,分配给名称 "blob" 的特定 Blob 不是子对象,它不在显示列表中。
所以它引用了错误的 Blob 或者它已经从显示列表中删除了。
为避免错误,您还可以说类似 if (blob.parent) remove child blob
我用 AS3 制作了一个游戏,你必须在落下的炸弹爆炸并摧毁一堵墙之前点击它。现在,我正试图移除在墙被摧毁时掉落的炸弹,所以我在我的游戏结束函数中做了一个 removeChild(blob)
,因为这些炸弹是用 addChild(blob)
添加到舞台上的,我不断收到此错误:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. ...line 80
...顺便说一句,我已经尝试过这样的事情:
this.parent.removeChild(this);
或
blob.parent.removeChild(blob);
或
stage.removeChild(blob);
但我仍然得到同样的错误。
这是我的代码:
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;
}
}
}
var name blob 一次只能引用一个特定的 Blob 对象。 每次您创建一个新的 Blob 时,您都会将名称 blob 重新分配给最后创建的那个,失去对前一个的引用。
该错误表明,在您调用 removeChild 时,分配给名称 "blob" 的特定 Blob 不是子对象,它不在显示列表中。
所以它引用了错误的 Blob 或者它已经从显示列表中删除了。
为避免错误,您还可以说类似 if (blob.parent) remove child blob