|
|
|||||
Регистрация: Feb 2014
Сообщений: 57
|
Проблема с getDefinitionByName
Здравствуйте , появилась непонятная проблема с getDefinitionByName
//параметром передаю 1 private function setLevel(levelNum:uint):void { var levelData:Class = (getDefinitionByName("cls.data." +"Level" + levelNum + "Data" )) as Class; trace(new levelData()); // [object Level1Data] currentLevelData = new Level1Data(); } а так : private function setLevel(levelNum:uint):void { var levelData:Class = (getDefinitionByName("cls.data." +"Level" + levelNum + "Data" )) as Class; trace(new levelData()); //в этой строке падает с ошибкой:[Fault] exception, information=ReferenceError: Error #1065: Переменная Level1Data не определена. currentLevelData = new levelData(); а во втором варианте переменная levelData = undefined |
|
|||||
http://help.adobe.com/ru_RU/FlashPla...initionByName()
Почитайте описание. Если определение не найдено, выбрасывается исключение. Правильнее будет обрабатывать эту ситуацию: var levelData:Class; try{ levelData = getDefinitionByName("Level1Data") as Class; }catch(err:Error){ trace("Нет данных: " + err); }
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Feb 2014
Сообщений: 57
|
первый вариант же работает, там создается экземпляр этого класса , пакет я указал cls.data. , а когда я создаю экземпляр вне trace , у меня вылетает ошибка
|
|
|||||
Классы, которые берутся через getDefinitionByName должны быть вкомпилированы в проект. А если они нигде не упомянуты или нет специальной настройки компилятора, то они игнорируются. В первом случае класс упомянут
Соответственно он вкомпилировался и все работает. Во втором случае нет. Решение у этой проблемы простое. Просто нужно где-то упомянуть класс. Я делаю это в отдельном классе, который просто импортирую в нужный мне проект. Но можно просто где-то написать Например в конструкторе, и после этого все заработает |
|
|||||
На сколько я знаю, еще можно подключить либу как include.
|
|
|||||
Регистрация: Feb 2014
Сообщений: 57
|
Да, все заработало, прописал в конструкторе. А если допустим у меня 20 уровней, соответственно Level1Data, Level2Data,Level3Data ... И все они наследуются от LevelData, можно ли как нибудь поизящней их прописать?
|
|
|||||
Marlin эти классы в swc или swf библиотеке?
|
|
|||||
Мне кажется гораздо порще и приятнее решить данную задачу через интерфейсы. Для уровня прописывается интерфейс ILevel в котором описываются все функции LevelData. Для Main класса тоже прописывается интерфейс IMain с одной функцией getLevel():ILevel. Таким образом подгрузив этот свф, и зная что его Main это IMain вы без всяких проблем забираете у него ILevel, пользуте и радуетесь. Если несколько уровней в одном свф, то нужно доработать IMain передавая количество уровней и в добавить например индекс getLevel(index:uint):ILevel.
__________________
ответ прост: be || !be == true |
|
|||||
Регистрация: Feb 2014
Сообщений: 57
|
Да я думал прям в проекте их забить в одну папку, так как там нет никаких новых текстур, только числовые данные.
|
Часовой пояс GMT +4, время: 02:16. |
|
« Предыдущая тема | Следующая тема » |
|
|