Создание класса динамически в ActionScript - PullRequest
0 голосов
/ 17 июля 2009

Позвольте мне сначала представить проблему. Мне нужно загрузить все изображения, которые я использовал в своем проекте, без встраивания. Изображения присутствуют либо в скинах, либо в виде значков для элементов на деревьях. Я наткнулся на класс IconUtility здесь Я смог изменить его и использовать его для деревьев, но проблема в том, что мы не можем использовать iconutility для одного и того же компонента, чтобы установить 2 разных скина (как для кнопки - upskin downskin). Я не смог придумать обходной путь с иконописью. Можно ли динамически моделировать встраивание и создавать класс и возвращать класс во время выполнения?

Ответы [ 2 ]

0 голосов
/ 17 июля 2009

Самая простая вещь для выполнения этих вещей - создать один / несколько SWF-файлов, содержащих ваши ресурсы, загрузить их, а затем извлечь оттуда классы (т. Е. Из загруженного домена приложения SWFS) ...

Есть несколько решений для этого:

  • hardcore версия предназначена для загрузки этих изображений в ByteArray s с помощью URLLoader, а затем создания нового ByteArray, который будет SWF-файлом, содержащим встроенные ресурсы и необходимые инструкции для связывания их с классами. Вы можете взглянуть на swfassist ...
  • немного проще и эффективнее (поскольку вы делаете это только один раз), это сделать на сервере ... здесь вы можете
    • просто используйте flex compiler
    • использовать swfmill
    • использовать некоторые библиотеки для манипулирования SWF, например ming
    • сделай сам, вручную ...:)

надеюсь, что это поможет

edit: второе решение - создание ресурсов на сервере, использование подходящего инструмента ... или кодирование инструмента самостоятельно, но это была скорее шутка ... :) ... я понял, что ссылка на гибкий компилятор была неправильной ... идея состояла в том, чтобы просто подключить его к вашему веб-серверу, а затем скомпилировать какой-нибудь ActionScript, который будет выполнять встраивание ... так что вы сгенерируете один ActionScript файл вроде этого:

package {
    import flash.display.Sprite;
    import flash.utils.describeType;
    public class Assets extends Sprite {
        [Embed(source='asset_1_Location')]
        public static var asset_1:Class;
        [Embed(source='asset_2_Location')]
        public static var asset_2:Class;
        ...
        [Embed(source='asset_n_Location')]
        public static var asset_n:Class;    
        public function Assets() { }
        public static function getAll():Object {
            var ret:Object = { };
            for each (var x:XML in describeType(Assets).variable.(@type=="Class")) {
                var name:String =  x.@name;
                ret[name] = Assets[name];
            }
            return ret;
        }
    }
}

Затем компилятор Flex скомпилирует его ... при загрузке извлеките данные с помощью LoaderInfo :: applicationDomain.getDefinition ("Assets"). GetAll (), который даст вам карту ключ-значение со всеми необходимыми классами. ..

с другими инструментами, это будет работать иначе, но я надеюсь, что это проясняет, как это должно работать ...

на сервере вам нужен сервис, который будет создавать эти SWF-файлы активов и кэшировать их ... так что вы отправляете некоторый POST-запрос, например, с нужным JSON-массивом файлов / изображений и верну вам swf ... сервер должен делать соответствующее кэширование, конечно ...

надеюсь, теперь это помогает ...:)

Greetz

back2dos

0 голосов
/ 17 июля 2009

Это было то, что я искал ... К сожалению, автор утверждает, что он не смог использовать его для скинов кнопок

...