Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамическая Embed Image (http://www.flasher.ru/forum/showthread.php?t=172123)

billion 02.12.2011 08:42

Динамическая Embed Image
 
Здравствуйте!

Подскажите плиз, как заставить Embed работать динамически?

вставляю картинки в спрайт:

Код AS3:

[Embed(source='myinc/img/some_picture.png')] var ico2Class:Class;
var ico2:Bitmap = new ico2Class();

хочу чтоб они динамически определялись в зависимости от переменной "house". что-то вроде этого:

Код AS3:

[Embed(source='myinc/img/'+house+'.png')] var ico2Class:Class;
var ico2:Bitmap = new ico2Class();


saikspaik 02.12.2011 09:26

Цитата:

Подскажите плиз, как заставить Embed работать динамически?
С помощью ActionScript - никак. Только сторонним средствами, если очень нужно.

billion 02.12.2011 09:40

хмм.... а что за сторонние средства?

тогда как с помощью АС3 это сделать?

почитал на форуме.... увидел примеры, но у меня не работает:

Код AS1/AS2:

 
                [Embed(source='myinc/img/some_picture.png')] public static var sp:Class;
                [Embed(source='myinc/img/another_picture.png')] public static var ap:Class;
 
public function getBitmap(str:String=''):Bitmap {
                        var ico2:Bitmap;
                        var cc:Class = getDefinitionByName(str) as Class;
                        ico2 = new cc;
                        return ico2;
                }
 
getBitmap("sp");

выдаёт ошибку
ReferenceError: Error #1065: Переменная sp не определена.

Добавлено через 13 минут
разобрался.

то что выдал
Код AS3:

var aa:String = getQualifiedClassName(new sp);

вставил в
Код AS3:

var cc:Class = getDefinitionByName(aa) as Class;


gloomyBrain 02.12.2011 11:40

И в чем смысл подобных манипуляций?

PS
Сторонние средства - это генерация файлов по шаблону перед сборкой приложения. Embed - это мета-тэг компилятора, он к ActionScript особого отношения не имеет.

smithy 02.12.2011 11:41

@billion, это в любом случае не динамический Embed. Это метод для получения битмапы из текущего ApplicationDomain. При этом битмапа либо была заэмбедена вручную, либо загружена в текущий домен.

А чтобы динамически подгружать картинки в зависимости от переменной house, надо использовать Loader.

billion 02.12.2011 13:52

перешёл на лоадер.... теперь идёт динамическая подгрузка с диска.

но это не то что я хотел получить.
в своих начальных "махинациях" (см. топик) я хотел налету выбирать встроенную картинку в зависимости от переменной. и быстро и удобно. хоть их и будет около 500, но они все маленькие.
недостаток - при появлении 501 картинки, надо перекомпилить код.

я пытался сделать так чтобы новые картинки автоматически встраивались в приложение.

что у меня в коде происходит? при определённом событии из 500 картинок выбираются некоторые в зависимости от переменных и отображаются несколько копий каждой из них в спрайтах на сцене.
например взять хаусе1 и хаусе10 и отобразить 50 копий хаусе1 и 20 копий хаусе2. соответственно требуется чтобы это всё не моргало и отображалось быстро.

хотелось бы реализовать следующий механизм:
если нужная картинка встроена в приложение - отобразить её.
если нет то подгрузить с сервера, встроить в приложение и отобразить.

как-то можно это реализовать?

smithy 02.12.2011 14:05

Вообще, 500 картинок, заэмбеденых во флешку - это не самый лучший подход.

Ну а если вы хотите проверять зашита ли картинка во флешку, то тут приходит в голову 2 варианта:
1. Некий ResourceManager, который знает какие картинки вшиты во флешку, какие уже загружены, а какие надо загрузить. Соответственно перед получением картинки проверять ее существование в менеджере.
2. В Вашем методе поставить getDefinitionByName в try..catch. Если картинка не найдена в домене приложения, метод выбросит исключение, и значит картинку надо загрузить.

billion 02.12.2011 14:07

точно! блин.... заработался. пока ходил курить тоже пришёл к такому же решению. благодарю :)


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

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