Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Использовать динамическизагруженное изображение как embed (http://www.flasher.ru/forum/showthread.php?t=170788)

Alex_YAROST_22 02.11.2011 00:28

Использовать динамическизагруженное изображение как embed
 
Здравствуйте форумчане.

Буду краток )))
Есть API для работы с графикой, и некий метод, который в качестве параметра принимает Class граф.изображения, которое предварительно встроено с использованием embed.
В самом методе вот что делается с этим классом:

Код AS3:

[Embed(source = "flower.png")] protected var UserImage:Class;
 
...
loadGraphic(UserImage);
...
 
//а это в API
public function loadGraphic(Graphic:Class)
{
...
  var localBitmapData:BitmapData = (new Graphic).bitmapData;
}

Собственно, есть необходимость менять изображения не пересобирая флэшку, а просто перезаписывая файлы с картинками в папке. Т.е. мне надо передать Class-изображение в конструктор при этом вытащенный из какого-нить Loader, URLLoader или что-то подобное.
Всякие фокусы с loadbytes и последующим (bytesloader.data as Class) или (Loader.content) ессно не работают и выплёвывают ошибку: Error #1007: Попытка реализации в объекте, который не является конструктором.

Помогите )

Inet_PC 02.11.2011 01:05

Если Вы можете изменить метод loadGraphic, то что то типа этого должно работать:
Код AS3:

public function loadGraphic(Graphic:Object)
{
...
  var localBitmapData:BitmapData = Graphic is Class ? ((new Graphic).bitmapData) : (Graphic as Bitmap).bitmapData;
}
loadGraphic(loader.content as Bitmap);

Нужно еще проверок добавить.

Добавлено через 6 минут
А если нет, то может сработает костыль типа этого:
Код AS3:

package
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
 
        public class MyBitmap extends Bitmap
        {
                public static var bd: BitmapData;
                public function MyBitmap(bitmapData:BitmapData=null, pixelSnapping:String="auto", smoothing:Boolean=false)
                {
                        super(bitmapData || bd, pixelSnapping, smoothing);
                        bd = null;
                }
        }
}
MyBitmap.bd = (loader.content as Bitmap).bitmapData;
loadGraphic(MyBitmap);

Но это такой костыль.
Все таки лучше сделать два метода:
Код AS3:

public function loadGraphicClass(value: Class):void
{
      loadGraphic((new value() as Bitmap).bitmapData);
}
public function loadGraphic(bd:BitmapData):void
{
 
}


Alex_YAROST_22 02.11.2011 10:35

Спасибо, видимо придется дописывать свой loadGraphics чтобы принимал Bitmap. Но задача, по сути, получается неприступная... в каком же "виде" представлен Embed внутри плеера? )))

Inet_PC 02.11.2011 10:44

Цитата:

в каком же "виде" представлен Embed внутри плеера? )))
Например наследник класса BitmapAsset.
Вы просто хотите в рантайм создать еще один класс, но этим занимается компилятор, а не флешка, конечно можно запариться, но стоит ли овчинка выделки?

Alex_YAROST_22 02.11.2011 11:47

Да-да, вот теперь я осознал свой "запар" )))

Спасибо за наводку, чтение про BitmapAsset http://help.adobe.com/ru_RU/FlashPla...tmapAsset.html действительно многое расставило на свои места.


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

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