Создание .swc - почему интерфейсы не работают, а классы работают?

Я делаю игру, которая загружает карту .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». Почему ну почему? Если кто может помочь, буду признателен.


person joeatsalot    schedule 26.09.2010    source источник


Ответы (1)


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

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

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

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

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

Удачи!

person Oliver    schedule 04.02.2011
comment
УДИВИТЕЛЬНО - я не знал об этой опции, чтобы экспортировать весь fla как swc. Большое спасибо за ответ! - person joeatsalot; 06.02.2011