删除Root of actions actionscript3

时间:2013-09-05 20:19:52

标签: actionscript-3 removechild document-root

我创建了4个Notes实例,我让它们向右移动直到它们的x值大于100.一旦它们存在,我该如何删除它们?我运行了一个跟踪语句并确认这些实例的父项是root(确切地说是root1)。如果我输入     root.removeChild(本); 我收到一条错误说“调用可能未定义的方法removeChild” 如果我输入     removeChild之(本); 我得到一个错误说“提供的DisplayObject必须是调用者的子代”。完整代码发布在下面。最后}的最后一行是问题行。非常感谢你的帮助!

package 
{
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.utils.getDefinitionByName;
import flash.utils.Timer;
import flash.events.TimerEvent;

[Frame(factoryClass="Preloader")]
public class Main extends Sprite 
{
private var speed:int = 8;
[Embed(source="../lib/Dodgethis.jpg")]
public var Notes:Class;
public var numnotes:Number;
public var timer:Timer = new Timer(500, 1)
public var rootContainer:DisplayObjectContainer = DisplayObjectContainer (root);

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point
        timer.start();
        timer.addEventListener(TimerEvent.TIMER, testevent);

        }

    private function testevent(e:Event = null):void {
        trace("testevent has run");
        appear();
    }

    private function appear() {
        var arr1:Array = new Array;
        numnotes = 4;

        for (var i = 0; i < numnotes; i++)
            {
            trace (i);
            var nbm:Bitmap = new Notes;
                stage.addChild(nbm);
                nbm.y = i * 50;
                arr1.push(nbm);
                addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
        }

    }
    private function loop (e:Event):void {
        this.x += speed;
        trace(this.x) ;
        if (this.x > 100) {
            removeEventListener(Event.ENTER_FRAME, loop);
            trace ("Event listener was removed");
            //removeChild(this);
            //rootContainer.removeChild (nbm);
            /*trace(this.contains)


            trace(this.name)
            trace(this)*/
            trace(this.parent.name); //root
            removeChild(this);
        }
    }


}

}

2 个答案:

答案 0 :(得分:0)

尝试在循环函数中使用它

e.target.parent.removeChild(e.target);
//or
stage.removeChild(e.target);

答案 1 :(得分:0)

您正在将音符添加到舞台。所以你需要将它们从舞台上移除。

stage.removeChild( note );

您只能从其父级移除子级,而不能从任何其他容器移除子级。因此,在另一个容器上调用removeChild将始终失败