Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Класс из строки (http://www.flasher.ru/forum/showthread.php?t=189824)

Psijic 17.12.2012 16:18

Класс из строки
 
Всем доброго дня. У меня есть массив типа

Код AS3:

private const UNITS:Array = [ClassA, ClassB, ClassC];

запускается нужный класс таким образом:

Код AS3:

private var index:uint = 1;
var unit:* = new UNITS[index]();
this.addChild(unit)

однако, требуется оптимизировать размер файла чтобы импортировался только 1 класс. Вариант - заменить массив на строки

Код AS3:

private const UNITS:Array = ["ClassA", "ClassB", "ClassC"];

но вот как их преобразовать потом? Варианты типа

Код AS3:

this[MODULES[index]]();
var ClassReference:Class = getDefinitionByName("ClassA") as Class;

не проходят

Hauts 17.12.2012 16:26

А какие варианты проходят?

udaaff 17.12.2012 16:26

Можно использоваться условную компиляцию, или грузить класс извне.
И не могли бы вы привести более конкретный пример, зачем вам это надо.

Stone 17.12.2012 16:44

Цитата:

Сообщение от Psijic (Сообщение 1110356)
заменить массив на строки

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

Psijic 17.12.2012 17:09

Цитата:

Сообщение от Hauts (Сообщение 1110357)
А какие варианты проходят?

цель вопроса - как раз это и выяснить :)

Добавлено через 1 минуту
Цитата:

Сообщение от udaaff (Сообщение 1110358)
Можно использоваться условную компиляцию, или грузить класс извне.
И не могли бы вы привести более конкретный пример, зачем вам это надо.

про 1-е просьба поподробнее, все-таки ищется конкретное решение. Директив типа #IFDEF я не находил во флеше :) Или вы предлагаете что-то типа:

case 1: ClassA;
case 2: ClassB;
case 3: ClassB;

Зачем это все надо - именно чтобы уменьшить размер swf на выходе, с несколькими классами условный вес получается 300кб, с одним - 150кб

PS думаю, если это вариант - то можно допустить здесь динамический импорт, тогда будет выглядеть типа

Код AS3:

switch(index) 
{
    case 0:
        import ClassA;
        var unit:* = new ClassA;
        break;
    case 1:
        import ClassB;
        var unit:* = new ClassB;
        break;
    case 2:
        import ClassC;
        var unit:* = new ClassC;
        break;
}


Hauts 17.12.2012 17:29

Что-то вы явно не так понимаете. Если без подгрузки классов делать приложение, то вне зависимости от того, как вы классы инициируете, они все равно будут вшиты во флэшку.

udaaff 17.12.2012 17:37

Цитата:

про 1-е просьба поподробнее
http://www.flasher.ru/forum/blog.php?b=530
http://livedocs.adobe.com/flex/3/htm...pilers_21.html

Добавлено через 11 минут
Цитата:

PS думаю, если это вариант - то можно допустить здесь динамический импорт, тогда будет выглядеть типа
И директива import лишь делает ваш класс видимым компилятору. Класс будет вкомпилен только в случае явного указания его имени.

Psijic 17.12.2012 18:42

Цитата:

Сообщение от udaaff (Сообщение 1110370)
http://www.flasher.ru/forum/blog.php?b=530
http://livedocs.adobe.com/flex/3/htm...pilers_21.html

Добавлено через 11 минут

И директива import лишь делает ваш класс видимым компилятору. Класс будет вкомпилен только в случае явного указания его имени.

да, :: я еще не использовал, посмотрю


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

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