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

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

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

Регистрация: Nov 2007
Адрес: UKRAINE
Сообщений: 32
Отправить сообщение для artics с помощью ICQ
Tools Ресайз BitmapData

кеширую кадры с помощью этого класса http://flashgameblogs.ru/blog/actionscript/667.html
но иногда размер изображений слишком большой и занимает слишком много лишней памяти. есть ли какие-то методы или стандартные функции для управления размером BitmapData без использования промежуточных BitmapData, а то перерыл документацию и гуглил но чет ничего толкового не могу найти

Старый 12.01.2012, 00:42
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
есть ли какие-то методы или стандартные функции для управления размером BitmapData без использования промежуточных BitmapData
Опишите проблему подробнее...

Старый 12.01.2012, 01:07
artics вне форума Посмотреть профиль Отправить личное сообщение для artics Найти все сообщения от artics
  № 3  
Ответить с цитированием
artics

Регистрация: Nov 2007
Адрес: UKRAINE
Сообщений: 32
Отправить сообщение для artics с помощью ICQ
проблема состоит в том, что нужно добиться высокого FPS при большом количестве объектов на сцене. Не секрет, что стандартная анимация жутко тормозит, особенно если в ней присутствуют сложные формы. Самый простой метод - создать пул кешированых кадров мувиклипа, ну и потом по очереди добавлять их на сцену и удалять. В Интернете нашел неплохой премер реализации кеширования. Основывается он на функции BitmapData.draw(), которая работает :
Цитата:
Исходный экранный объект не использует свои примененные преобразования для этого вызова. Он обрабатывается в том виде, в котором представлен в библиотеке или файле: без преобразования матрицы, цвета и без режима наложения. Чтобы нарисовать экранный объект (например, фрагмент ролика) с помощью его собственных свойств преобразования, можно скопировать его объект свойства transform в свойство transform объекта Bitmap, использующего объект BitmapData.
Если в библиотеке очень большой за размерами MovieClip использование transform изменит его, но память Bitmapdata останется то й же что и раньше, то есть мне нужно нужно управлять размером BitmapData для экономии памяти, так как сотни кадров потянут за собой десятки метров памяти

Старый 12.01.2012, 07:46
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
есть ли какие-то методы или стандартные функции для управления размером BitmapData без использования промежуточных BitmapData
Только с промежуточными

Старый 12.01.2012, 18:05
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 5  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Не нужно промежуточный, можно вот так например.
Код AS3:
private function cacheFrame(source: MovieClip): BitmapData
{
	var rect: Rectangle = source.getRect(source);
	var sx: Number = source.scaleX;
	var sy: Number = source.scaleY;
	var bitmapData:BitmapData = new BitmapData(rect.width * sx, rect.height * sy, true, 0x00000000);
	var m:Matrix = new Matrix();
	m.translate(-rect.x, -rect.y);
	m.scale(sx, sy);
	bitmapData.draw(source, m);
        return bitmapData;
}
При кэшировании берется текущий скейл объекта и по нему создается BitmapData соответствующего размера.

Старый 13.01.2012, 02:00
artics вне форума Посмотреть профиль Отправить личное сообщение для artics Найти все сообщения от artics
  № 6  
Ответить с цитированием
artics

Регистрация: Nov 2007
Адрес: UKRAINE
Сообщений: 32
Отправить сообщение для artics с помощью ICQ
спасибо огромное, разобрался)

Старый 13.01.2012, 07:37
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Сообщение от Stitch512 Посмотреть сообщение
Не нужно промежуточный, можно вот так например.
Код AS3:
private function cacheFrame(source: MovieClip): BitmapData
{
	var rect: Rectangle = source.getRect(source);
	var sx: Number = source.scaleX;
	var sy: Number = source.scaleY;
	var bitmapData:BitmapData = new BitmapData(rect.width * sx, rect.height * sy, true, 0x00000000);
	var m:Matrix = new Matrix();
	m.translate(-rect.x, -rect.y);
	m.scale(sx, sy);
	bitmapData.draw(source, m);
        return bitmapData;
}
При кэшировании берется текущий скейл объекта и по нему создается BitmapData соответствующего размера.
Это и будет промежуточный объект

Старый 13.01.2012, 14:37
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 8  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Это не промежуточный - это собственно те данные которые и будут отображаться в Bitmap-е.

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

Теги
bitmapdata , битмап , кеширование кадров , растеризация , растеризация мувика
Опции темы
Опции просмотра

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

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


 


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


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