Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   getDefinitionByName не находит класс (http://www.flasher.ru/forum/showthread.php?t=166200)

Dron1564 31.08.2011 12:41

getDefinitionByName не находит класс
 
Здравствуйте ещё раз ))

Плз.. ответьте кто-нить, почему такая конструкция работает..
Код AS3:

 
trace( getQualifiedClassName(Level1) ); // "Levels::Level1"
trace( getDefinitionByName( getQualifiedClassName(Level1) ) ); //"[class Level1]"

а вот такая не работает...

Код AS3:

 
trace( getDefinitionByName( "Levels::Level1" ) ); // Ошибка

Error #1065: Переменная Level1 не определена.
at global/flash.utils::getDefinitionByName()

Нужно именно из строки переводить в класс, ибо количество уровней довольно большое....

bav 31.08.2011 12:51

Возможно следует указывать имя класса без указания пространства имен?
Код AS3:

trace( getDefinitionByName( "Level1" ) );


Dron1564 31.08.2011 12:53

Пробовал.. ;(

КорДум 31.08.2011 12:57

Класс не вкомпиливается. Где-то напишите просто
Код AS3:

Levels.Level1

Может это пакет? Тогда не ::, а точка.

Dron1564 31.08.2011 13:00

Хмм.. сейчас протрейсил...

Дело в том, что эти классы наследуются от другого "LevelBase" в этом же пакете(Levels ) ...
И он нормально трейсится, без ошибок..

Код AS3:

trace( getDefinitionByName( "Levels::LevelBase" ) ); // [class LevelBase]

Код AS3:

package Levels {
public class Level1 extends LevelBase{
...
    public function Level1(){
        ...
    }
...
}

P.s. точку тоже пробовал.. и "/", и ":"

fljot 31.08.2011 13:30

Level1 не вкомпилен во флешку. Чтобы он был определён (вкомпилирован) либо упомяните его где-то (как сказал кордум — так проще), либо читайте про аргументы компилятора.

Dron1564 31.08.2011 13:46

Т.е. перечислять все классы так или иначе придётся.... ладно.. всем спасибо...
Сделаю вот так:
Код AS3:

    private function getLvlClass( lvl:String ):Class{
        switch( lvl ){
            case "1": return Level1;
            case "2": return Level2;
            ...
        }
        return null;
    }


2Sun 31.08.2011 15:55

Можно просто одной переменной присвоить их все циклом и в конце ее занулить. Этого будет достаточно

КорДум 31.08.2011 16:29

2Sun, чего?

in4core 31.08.2011 16:32

Цитата:

2Sun, чего?
Код AS3:

var class:*;
for(var i:int = 0 ; i < 100; i++) class = new Class(Level+'i')

чей то типа того он хотел сказать. тока не помню как там прально писать

КорДум 31.08.2011 16:34

getDefinitionByName(), а не new Class(Level+'i'). Только смысл в методе getLvlClass отпадает. Цикл не нужен, нужно просто где-то упомянуть все классы. Короче, возвращаемся к посту номер 4.

in4core 31.08.2011 18:11

Цитата:

getDefinitionByName(), а не new Class(Level+'i').
Ну да сань, я и говорю не помню как писать, но такая реализация есть вообщем

Dron1564 01.09.2011 00:11

Цитата:

Сообщение от in4core (Сообщение 1027176)
Ну да сань, я и говорю не помню как писать, но такая реализация есть вообщем

Посмотри повнемательней первый пост.. в том то проблема, что через getDefinitionByName()
не возвращается(вылетает ошибка)... я так понял их нужно просто упомянуть до этого где то...

тогда зачем мне нужен будет getDefinitionByName() ... если их все мне придется упомянуть...
опять же +1 к моему варианту решения данной проблемы ))

P.s. ещё раз всем спасибо ( не думал что Flash на столько придирчив )

КорДум 01.09.2011 00:58

Цитата:

( не думал что Flash на столько придирчив )
Не Flash, а компилятор, который комилит ТОЛЬКО то, что Вы ему указываете. И правильно делает, иначе все наши флешки были напичканы ненужными случайно взятыми в ближайшей округе классами.

dimarik 01.09.2011 01:28

getDefinitionByName() и ApplicationDomain#getDefinition() актуальны для двухкадрового приложения (первый кадр максимально легкий, в нем код прелоадера) и загружаемых библиотек.

Psycho Tiger 01.09.2011 14:25

Цитата:

Сообщение от dimarik (Сообщение 1027297)
getDefinitionByName() и ApplicationDomain#getDefinition() актуальны для двухкадрового приложения (первый кадр максимально легкий, в нем код прелоадера) и загружаемых библиотек.

По мне они актуальны там, где они упрощают рабочий процесс.
Например, "случайная монетка" — графика из swc с однотипными названиями - MoneyGraphic0, MoneyGraphic1, и т.д.
Не вижу причин избегать здесь getDefinition.


Часовой пояс GMT +4, время: 17:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.