AS3, загрузка в SWF как пользовательский тип - PullRequest
4 голосов
/ 12 октября 2009

Фундаментальный вопрос здесь. Обычно в AS3 вы загружаете SWF-файл через Loader, и в результате вы получаете некий псевдо-MovieClip типа «Loader».

Есть ли какой-нибудь священный способ приведения этого загруженного SWF-файла к пользовательскому типу, который расширяет MovieClip, а не Loader, при условии, что SWF-файл был опубликован с базовым классом пользовательского типа? Без потери данных?

В качестве альтернативы, скажем, вы не можете, вы даже можете привести его из пользовательского типа, который расширяет сам Loader?

Ответы [ 3 ]

5 голосов
/ 12 октября 2009

Вы можете сделать что-то вроде этого:

Код в заглушке swf:

package {

    import flash.display.MovieClip;

    public class Stub extends MovieClip implements IStub {

        public function Stub() {
            trace("Stub::ctor");
        }

        public  function traceIt(value:String):void {
            trace("Stub::traceIt " + value);
        }
    }
}

Я использую интерфейс, но он не является строго необходимым.

package {

    public interface IStub {

        function traceIt(value:String):void;

    }
}

Код в "главном" swf.

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,handleInit);
loader.load(new URLRequest("Stub.swf"));

function handleInit(e:Event):void {
    var stub:Stub = loader.content as Stub;
//  or, using an interface 
//  var stub:IStub = loader.content as IStub;
    stub.traceIt("testing");
}
3 голосов
/ 12 октября 2009

Согласно комментариям к этой статье в LiveDocs , вы можете привести Loader.content к MovieClip и получить к нему доступ таким образом.

Однако есть некоторые ограничения. Например, сам SWF должен быть SWF-файлом AS3, а SWF, выполняющий загрузку, и загружаемый SWF-файл должны использовать одну и ту же песочницу.

1 голос
/ 12 октября 2009

Да, loader.content дает вам доступ ко всему, что было загружено. Вы ДОЛЖНЫ быть в состоянии просто использовать это как хотите.

Кроме того, у вас есть возможность расширить Loader, который уже расширяет DisplayObjectContainer, так что вы будете иметь большую часть функциональности MovieClip для начала. В этом случае запишите его так, чтобы вы могли просто вызвать MyCustomClass.load (swf здесь) и он должен делать то, что вам нужно.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...