Создание .swc - почему не работают интерфейсы, когда классы работают? - PullRequest
0 голосов
/ 27 сентября 2010

Я делаю игру, которая загружает карту .swfs во время выполнения. Карты будут содержать графику и код, которые могут варьироваться от карты к карте. Я решил сделать так, чтобы все карты реализовали интерфейс, чтобы все они могли одинаково использоваться в игре. Я использую .swc для содержания интерфейса, как в этой странице .

Я могу заставить классы работать в .swc, но не в интерфейсах!

Я использую Flash cs5 и flashdevelop для редактирования в AS3. Вот как я это делал:

1 - создайте map.fla с символом, называемым Map, и Map.as:

.
public class Map extends MovieClip {
    public function test():void {
        trace("woohoo");
    }
}

2- во Flash, щелкните правой кнопкой мыши символ карты и выберите «экспортировать SWC ...», а также «экспортировать SWF ...».

3 - создайте новый проект .fla и flashdevelop под названием Loader в новой папке и скопируйте в .swf и .swc, созданные в 2

4 - во flashdevelop, щелкните правой кнопкой мыши на SWC и выберите «Добавить в библиотеку»

5 - во флэш-памяти, настройки Actionscript -> путь к Lirbary, добавить SWC и установить тип ссылки: Внешний

Теперь в Loader.as я могу получить доступ к классу Map после загрузки в map.swf:

public class Loaderoo extends MovieClip {

    public function Loaderoo() {
        var loader:Loader = new Loader()
        loader.load(new URLRequest("map.swf"), new LoaderContext(false, ApplicationDomain.currentDomain));
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
        // var map:Map = new Map(); // this would throw a VerifyError 1014
    }

    private function loaded(e:Event):void {
        var map:Map = new Map();
        addChild(map);
        map.test(); // now it has loaded the class - traces "woohoo"
    }
}

Пока все хорошо. Но если я попытаюсь

public class Map extends MovieClip implements IMap {
    ...

и

private function loaded(e:Event) {
        var map:IMap = new Map();
        ...

это не работает! Я получаю «VerifyError: Ошибка # 1014: не удалось найти класс IMap». Почему? Если кто-нибудь может помочь, я был бы благодарен.

1 Ответ

0 голосов
/ 04 февраля 2011

Вам необходимо сохранить интерфейс IMap в SWC. Попробуйте экспортировать весь флаг как SWC, а не только символ карты.

Во Flash: Flash> Параметры публикации> Flash> установите флажок «Экспорт SWC».

Теперь опубликуйте SWF и используйте полученный SWC в FlashDevelop.

Также, возможно, это поможет, если вы полностью включите библиотеку в FlashDevelop

Для этого см. Выпуск № 2 здесь: http://flashontherocks.com/2010/12/13/flashdevelop-resolved-issues/

Удачи!

...