如何将removeChild应用于多个swf

时间:2013-06-06 18:18:34

标签: actionscript-3 flash external removechild

我有一个项目,用户可以选择按下5个键盘键中的任何一个,每个键盘键都加载不同的.swf文件。我想要用户按下的任何键来卸载当前正在播放的任何swf,并加载与按下的键相关联的任何一个。

我用两个.swf编码没有问题 - 每一个加载并同时卸载另一个 - 但是当我添加第三个时,它变得不稳定,第三个removeChild函数无法正常工作。

似乎问题是一次只能应用一个removeChild。有办法解决这个问题吗?

我正在使用的代码位于主时间轴内的一个框架上,并且它与除了直接加载swf的舞台之外的容器没有关联:

var myLoader:Loader = new Loader();
var myRequest:URLRequest=new URLRequest("swf/darker.swf");

var Loader2:Loader = new Loader();
var Request2:URLRequest=new URLRequest("swf/animalinside.swf");

var Loader3:Loader = new Loader();
var Request3:URLRequest=new URLRequest("swf/berlin1.swf");


stage.addEventListener(KeyboardEvent.KEY_DOWN, Darker);

function Darker(e:KeyboardEvent):void {
    if (e.charCode == 51) { //51=3
        myLoader.load(myRequest); 
        addChild(myLoader); 
        removeChild(Loader2);
        removeChild(Loader3);
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, animalInside);

function animalInside(e:KeyboardEvent):void {
    if (e.charCode == 52) { //52=4
         Loader2.load(Request2); 
         addChild(Loader2); 
         removeChild(myLoader);
         removeChild(Loader3);
    }
}


stage.addEventListener(KeyboardEvent.KEY_DOWN, Berlin1);

function Berlin1(e:KeyboardEvent):void {
    if (e.charCode == 53) {   //53=5
        Loader3.load(Request3);
        addChild(Loader3);  
        removeChild(myLoader);
        removeChild(Loader2);
    }
}

我尝试在removeChild() parens中添加多个实例,如下所示:
    removeChild(Loader3, Loader2, Loader4, ...);然而它不起作用。

堆叠removeChild似乎也不起作用:

removeChild(myLoader);
removeChild(Loader2);
removeChild(Loader3);
//etc.

不确定如何继续,非常感谢任何帮助!

提前致谢,

Llyfre

1 个答案:

答案 0 :(得分:0)

我会采用不同的方式。事实上更容易的路线。看看我下面写的代码。我没有测试过,但我很确定这会起作用

var swfs:Array = ["swf/darker.swf","swf/animalinside.swf","swf/berlin1.swf"];
var swfHolder:Sprite = new Sprite();
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

function keyDownHandler(e:KeyboardEvent):void
{
    //remove any previous children in swfHolder
    while (swfHolder.numChildren > 0) swfHolder.removeChildAt(0);

    //-- new loader and load the swf
    var loader = new Loader();

    switch (e.charCode)
    {
        case 51:
            loader.load(new URLRequest(swfs[0]));
            break;
        case 52:
            loader.load(new URLRequest(swfs[1]));
            break;
        case 53:
            loader.load(new URLRequest(swfs[2]));
            break;
    }
    swfHolder.addChild(loader);
}
addChild(swfHolder);