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