Как применить removeChild к нескольким SWF-файлам

У меня есть проект, в котором пользователь может нажать любую из 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() скобках, например:
removeChild(Loader3, Loader2, Loader4, ...);, но это не сработало.

Укладка removeChild тоже, похоже, не работает:

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

Не знаете, как действовать, любая помощь будет принята с благодарностью!

Заранее спасибо,

Llyfre


person user2191741    schedule 06.06.2013    source источник


Ответы (1)


Я бы пошел по другому пути. На самом деле, гораздо более простой маршрут. Взгляните на код, который я написал ниже. Я не тестировал, но уверен, что это сработает.

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);
person Ronnie    schedule 06.06.2013
comment
Работает как шарм! И теперь я понимаю, что использовать массивы тоже, поэтому двойное спасибо. - person user2191741; 07.06.2013
comment
Вы делаете ставку, пожалуйста, примите этот пост в качестве ответа, нажав на галочку. Также приветствуем переполнение стека! - person Ronnie; 07.06.2013