提供的DisplayObject必须是调用者的子级

Har*_*ald 3 object actionscript-3 addchild movieclip removechild

我是一个新手,我已经在这个问题上进行了数周的训练,并且我无法掌握这一点.下面的简单代码给出了"提供的DisplayObject必须是调用者的子代"错误.

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    removeChild(square)
}
Run Code Online (Sandbox Code Playgroud)

squareObj是库中的一个movieclip,它是为AS导出的.如何更改此代码以使其正常工作?我想这是我对正确的oop的了解,我缺乏,所以任何关于这个问题的良好教程的链接都表示赞赏.

问候H.

Mat*_*yra 6

问题是输入帧侦听器将被反复调用.第一次调用它时,DisplayObject确实是调用者的子代,但之后它不会(因为它已被删除).

所以我建议你这样做:

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    if (contains(square)) {
        removeChild(square)
    }
}
Run Code Online (Sandbox Code Playgroud)

要么检查广场是否真的是孩子 this

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    removeEventListener(Event.ENTER_FRAME, removeSquare)
    removeChild(square)
}
Run Code Online (Sandbox Code Playgroud)

或删除事件监听器,具体取决于您是否需要除了移除方块之外的其他事件.另外你应该注意到你可能根本看不到方形,因为它会在添加后很快被删除.