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