Создание класса динамически в ActionScript

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

2 ответа

Решение

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

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

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

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

редактировать: второе решение касается создания ресурсов на сервере, использования подходящего инструмента... или кодирования инструмента самостоятельно, но это была скорее шутка...:) ... я понял, ссылка на компилятор flex было неправильно... идея состояла в том, чтобы просто подключить его к вашему веб-серверу, а затем скомпилировать какой-нибудь 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

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

Другие вопросы по тегам