Форум Flasher.ru

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

van90 17.01.2015 01:36

Многократное использование Bitmap
 
Доброй ночи.
Я загружаю картинку и сохраняю её в статической переменной как Bitmap.
Код AS3:

 
private function onLoadComplete(e:Event):void
{
...
    var image:Bitmap = (_loader.content as Bitmap);
    image.smoothing = true;
 
    ImageDB[_imageDBType][_imageDBID] = image;
...
}

Далее пытаюсь вставить в несколько объектов, например:
Код AS3:

var sprite1: Sprite = new Sprite();
var sprite2: Sprite = new Sprite();
 
sprite1.addChild(ImageDB[_imageDBType][_imageDBID]);
sprite2.addChild(ImageDB[_imageDBType][_imageDBID]);

Картинка появляется только во втором спрайте.

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

Видимо надо копировать/клонировать битмап перед каждым добавлением? Как это лучше сделать или существует иной подход?

nubideus 17.01.2015 01:57

van90,

Код AS3:

sprite1.addChild(new Bitmap(ImageDB[_imageDBType][_imageDBID].bitmapData));
sprite2.addChild(new Bitmap(ImageDB[_imageDBType][_imageDBID].bitmapData));

Цитата:

Объект Bitmap может использовать свою ссылку BitmapData совместно с несколькими объектами Bitmap, независимо от свойств сдвига или поворота. Поскольку можно создать несколько объектов Bitmap, ссылающихся на один объект BitmapData, несколько экранных объектов могут использовать один сложный объект BitmapData, что предотвращает чрезмерную загрузку памяти в случае использования индивидуальных объектов BitmapData для каждого экземпляра экранного объекта.
http://help.adobe.com/ru_RU/FlashPla...tml#bitmapData

дело в том что один DisplayObject не может быть использован дважды в Display List

van90 19.01.2015 15:02

Цитата:

Сообщение от nubideus (Сообщение 1177641)
дело в том что один DisplayObject не может быть использован дважды в Display List

Да, я пришел к такому же выводу. Но как быть, если всё же надо использовать дважды?

nubideus 19.01.2015 15:11

van90,
один DisplayObject не может быть использован дважды в Display List

никак не быть. идти читать справку вот как.

делаешь скриншот объекта и этот скриншот показываешь несколько раз если очень надо

elder_Nosferatu 19.01.2015 16:06

@van90

Битмапа - это обертка, которая выступает ДисплейОбьектом (может поселиться в ДисплейЛисте) и отобраджает растровую графическую информацию (БитмапДата). Как уже было сказано, битмапу можно поместить только в одном месте, а вот БитмапДату можно использовать сколько угодно раз. Присмотрись внимательно к первому посту тов. nubideus`а - Битмап создаешь столько, сколько надо (они достаточно легковесны), но используешь в каждой из них единственную БитмапДату (с загруженой Битмапы).

van90 19.01.2015 18:27

Цитата:

Сообщение от nubideus (Сообщение 1177720)
van90,
никак не быть. идти читать справку вот как.

Какой вы злой, я просто спросил варианты решения :o

Цитата:

Сообщение от elder_Nosferatu (Сообщение 1177722)
@van90

Битмапа - это обертка, которая выступает ДисплейОбьектом (может поселиться в ДисплейЛисте) и отобраджает растровую графическую информацию (БитмапДата). Как уже было сказано, битмапу можно поместить только в одном месте, а вот БитмапДату можно использовать сколько угодно раз. Присмотрись внимательно к первому посту тов. nubideus`а - Битмап создаешь столько, сколько надо (они достаточно легковесны), но используешь в каждой из них единственную БитмапДату (с загруженой Битмапы).

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

var image:Bitmap = (_loader.content as Bitmap);
 
ImageDB[_imageDBType][_imageDBID] = image.bitmapData;
 
...
 
sprite.addChild(new Bitmap(ImageDB[_imageDBType][_imageDBID]));


in4core 19.01.2015 20:35

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

Цитата:

var dat:BitmapData = new BitmapData(100,100,true,0);
for(var i:int = 0; i < 10; i++) dat.draw(array[i]), var bmp:Bitmap = new Bitmap(dat);
Всегда отрисовывает только 1й объект, а если пересоздавать дату в цикле, то все ок

nubideus 19.01.2015 23:20

Цитата:

Какой вы злой, я просто спросил варианты решения
ох простите пожалуйста, видимо я как то не так дал готовый рабочий код


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

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