Как я могу использовать объект из загруженного SWF-файла, если определение класса нужно изменить? - PullRequest
0 голосов
/ 21 июня 2011

Я конвертирую все операторы вставки в мой сайт с ленивой загрузкой.Код, который раньше был таким:

[Embed(source="/newswf.swf", symbol="kungfu")]
public static var Kungfu:Class;

, теперь преобразован в эту форму:

private var _loader:Loader = new Loader();
public static var abcd:Class = null;
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgressHandler);
_loader.load(new URLRequest("newswf.swf"));



private function onLoadComplete(evt:*):void
{
    abcd = evt.target.applicationDomain.getDefinition("kungfu") as Class;
    dispatchEvent(new MyEvent(MyEvent.LOADING_DONE));
}

Функции, использующие abcd, будут вызываться при получении MyEvent.LOADING_DONE event.

Теперь моя проблема в том, что когда класс использует символ и имеет определение класса, я не могу реализовать его с помощью вышеуказанного метода, потому что конструктор будет вызываться немедленно и не будетслушайте прослушиватель событий onLoadComplete.

[Embed(source="/newswf.swf", symbol="judo")]
public class Judo extends MovieClip
{
    public function Judo()
    {
        super(...);
    }
}

Когда я помещаю код в конструктор в отдельную функцию и вызываю его в методе onLoadComplete, я получаю сообщение об ошибке, поскольку метод super изначальноиспользовался в конструкторе, и его нельзя использовать вне конструктора.

Может ли кто-нибудь подсказать мне, как в этом случае выполнять ленивую загрузку?

Заранее спасибо:)

1 Ответ

0 голосов
/ 21 июня 2011

Я не уверен, возможно ли расширить определение класса после загрузки, потому что я никогда не пробовал, но вы пробовали просто приводить загруженный объект и затем не вызывать super () снова?То есть внутри функции загрузчика:

obj:Judo = Judo(LoaderInfo(e.target).content)

Эта статья может быть полезна: http://www.parorrey.com/blog/flash-development/as3-loading-external-swf-into-movieclip-using-loader-class-in-flash-actionscript3/


Тем не менее, я, вероятно, не буду структурировать код таким образоми просто избегайте ситуации, которую вы описываете с другой структурой.Мол, один подход был бы вместо превращения загруженного объекта в объект дзюдо, я бы инициализировал отдельный объект дзюдо и затем передал бы ему загруженный объект.Старое различие "has-a" и "is-a".

Другой подход, который выполняет то же самое, состоит в том, чтобы содержащий класс не выполнял загрузку и просто создавал новый объект дзюдо, передаваяимя файла в конструкторе.Затем объект Дзюдо выполняет загрузку.

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