2010-09-26 2 views
0

Я делаю игру, которая загружает карту .swfs во время выполнения. Карты будут содержать графику и код, которые могут варьироваться от карты к карте. Я решил сделать все карты реализацией интерфейса, поэтому все они могут использоваться одинаково в игре. Я использую .swc, чтобы содержать интерфейс, например, в this page.Создание .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, щелкните правой кнопкой мыши значок карты и выберите «export SWC ...», а также «export SWF ...».

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

4- в FlashDevelop, щелкните правой кнопкой мыши МЖК и выберите «добавить в библиотеку»

5- вспышке, настройки Actionscript -> lirbary пути, добавьте SWC и установить тип Link: Внешний

Сейчас в Loader.as я могу получить доступ к классу карты после загрузки в 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: Error # 1014: Class IMap не найден». Почему, почему? Если кто-то может помочь, я буду благодарен.

ответ

0

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

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

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

Кроме того, может быть, это поможет, если вы не будете включать библиотеку полностью в FlashDevelop

Для этого см вопроса нет 2 здесь: http://flashontherocks.com/2010/12/13/flashdevelop-resolved-issues/

Удачи!

+0

УДИВИТЕЛЬНЫЙ - Я не знал об этом варианте для экспорта всей fla как swc. Большое спасибо за ваш ответ! – joeatsalot

+0

приветствуется :) – Oliver