Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.01.2015, 01:36
van90 вне форума Посмотреть профиль Отправить личное сообщение для van90 Найти все сообщения от van90
  № 1  
Ответить с цитированием
van90

Регистрация: Jul 2014
Сообщений: 32
По умолчанию Многократное использование 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]);
Картинка появляется только во втором спрайте.

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

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

Старый 17.01.2015, 01:57
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 2  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
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

Старый 19.01.2015, 15:02
van90 вне форума Посмотреть профиль Отправить личное сообщение для van90 Найти все сообщения от van90
  № 3  
Ответить с цитированием
van90

Регистрация: Jul 2014
Сообщений: 32
Цитата:
Сообщение от nubideus Посмотреть сообщение
дело в том что один DisplayObject не может быть использован дважды в Display List
Да, я пришел к такому же выводу. Но как быть, если всё же надо использовать дважды?

Старый 19.01.2015, 15:11
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 4  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
van90,
один DisplayObject не может быть использован дважды в Display List

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

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

Старый 19.01.2015, 16:06
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 5  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
@van90

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

Старый 19.01.2015, 18:27
van90 вне форума Посмотреть профиль Отправить личное сообщение для van90 Найти все сообщения от van90
  № 6  
Ответить с цитированием
van90

Регистрация: Jul 2014
Сообщений: 32
Цитата:
Сообщение от nubideus Посмотреть сообщение
van90,
никак не быть. идти читать справку вот как.
Какой вы злой, я просто спросил варианты решения

Цитата:
Сообщение от elder_Nosferatu Посмотреть сообщение
@van90

Битмапа - это обертка, которая выступает ДисплейОбьектом (может поселиться в ДисплейЛисте) и отобраджает растровую графическую информацию (БитмапДата). Как уже было сказано, битмапу можно поместить только в одном месте, а вот БитмапДату можно использовать сколько угодно раз. Присмотрись внимательно к первому посту тов. nubideus`а - Битмап создаешь столько, сколько надо (они достаточно легковесны), но используешь в каждой из них единственную БитмапДату (с загруженой Битмапы).
Спасибо за идею, так и сделал. Сохранил битмапдату загруженной картинки, а в нужных местах создаю новую битмапу, используя битмапдату.
Код AS3:
var image:Bitmap = (_loader.content as Bitmap);
 
ImageDB[_imageDBType][_imageDBID] = image.bitmapData;
 
...
 
sprite.addChild(new Bitmap(ImageDB[_imageDBType][_imageDBID]));

Старый 19.01.2015, 20:35
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
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й объект, а если пересоздавать дату в цикле, то все ок
__________________
Марк Tween

Старый 19.01.2015, 23:20
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 8  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
Какой вы злой, я просто спросил варианты решения
ох простите пожалуйста, видимо я как то не так дал готовый рабочий код

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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