Форум 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=195386)

iflamberg 05.03.2013 21:17

Принудить компилятор внедрить класс.
 
Я уже спрашивал, но не получил вразумительного ответа.
У меня на основе xml-ки генерируется пачка объектов.

Код AS3:

        var xml:XML = Main.skills.skill.(attribute("name") == skillname)[0];
        var base:String = xml.@base;
        if (!base) base = "SkillBase";
        var c:Class = getDefinitionByName("engine.skills::"+base) as Class;
        var s:SkillBase = new c();

Но. компилятор, зараза, если класс нигде в коде ниразу не засветился его не встраивает. В результате приходится писать какую-нибудь ерунду типа:
Код AS3:

        private static const SKILLS_LIST = [Skill1, Skill2, Skill3...];
        private static const MUSIC_LIST= [Music_opus_opium_momentums, Music_Per_DLDN_Instrumental,...];

Ну неудобно. Ничего сделать нельзя? Из вне грузить не хотелось бы.

etc 05.03.2013 21:42

ЕМНИП у компилятора опция такая есть, рекурсивно подсосать все что найдет.

gloomyBrain 05.03.2013 21:56

Опция называется -include-libraries+="Disk:/folder path/"
Чуть подробнее есть тут

ChuwY 05.03.2013 21:56

Если я не ошибаюсь, проблема в том, что у mxmlc нет директивы include-sources.

Можно разрешить ситуацию посредством временной библиотеки.

Готовим comc-config.xml, в котором используем директиву include-sources, например, так:
Код:

<include-sources>
    <path-element>@source.dir@</path-element>
</include-sources>

Готовим mxmlc-config.xml, в котором используем директиву include-libraries, например, так:
Код:

<include-libraries>
    <library>@output.swc.dir@/@swc.file@</library>
</include-libraries>

После чего собираем проект ant-ом или другим подобным инструментом, указав правильную последовательность целей сборки.

Аргументы mxmlc
Аргументы compc

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

Создаем файл includes.xml.
Пишем нечто вроде:
Код:

<?xml version="1.0" encoding="utf-8" ?>
<flex-config>
    <includes>
        <symbol>somepack.SomeClassB</symbol>
        <symbol>somepack.SomeClassA</symbol>
    </includes>
</flex-config>

После чего в среде разработки к опциям компилятора дописываем -load-config+=includes.xml ииии все. Все перечисленные классы будут включены как надо. Главное не забывать делать clean/refresh после изменений дополнительного конфига.
Тк у вас имена классов уже содержатся в каком-то конфигурационном файле, перегон их каким-нибудь скриптом в includes не должен вызвать трудностей.

dimensb 06.03.2013 11:54

Я пользуюсь следующим способом. Для классов ClassName1 и ClassName2, которые должны войти в swf делаю конструкцию вида:

Код AS3:

package
{
        import classes.*;
 
        public class ElementsTypesHelper
        {
                ClassName1;
                ClassName2;
        }
}

без создания промежуточных объектов. Правда этот класс генерирую автоматически, поэтому вручную ничего не вносится.


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

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