Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ресайз BitmapData (http://www.flasher.ru/forum/showthread.php?t=173810)

artics 12.01.2012 00:33

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

i.o. 12.01.2012 00:42

Цитата:

есть ли какие-то методы или стандартные функции для управления размером BitmapData без использования промежуточных BitmapData
Опишите проблему подробнее...

artics 12.01.2012 01:07

проблема состоит в том, что нужно добиться высокого FPS при большом количестве объектов на сцене. Не секрет, что стандартная анимация жутко тормозит, особенно если в ней присутствуют сложные формы. Самый простой метод - создать пул кешированых кадров мувиклипа, ну и потом по очереди добавлять их на сцену и удалять. В Интернете нашел неплохой премер реализации кеширования. Основывается он на функции BitmapData.draw(), которая работает :
Цитата:

Исходный экранный объект не использует свои примененные преобразования для этого вызова. Он обрабатывается в том виде, в котором представлен в библиотеке или файле: без преобразования матрицы, цвета и без режима наложения. Чтобы нарисовать экранный объект (например, фрагмент ролика) с помощью его собственных свойств преобразования, можно скопировать его объект свойства transform в свойство transform объекта Bitmap, использующего объект BitmapData.
Если в библиотеке очень большой за размерами MovieClip использование transform изменит его, но память Bitmapdata останется то й же что и раньше, то есть мне нужно нужно управлять размером BitmapData для экономии памяти, так как сотни кадров потянут за собой десятки метров памяти

goodguy 12.01.2012 07:46

Цитата:

есть ли какие-то методы или стандартные функции для управления размером BitmapData без использования промежуточных BitmapData
Только с промежуточными

Stitch512 12.01.2012 18:05

Не нужно промежуточный, можно вот так например.
Код 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 соответствующего размера.

artics 13.01.2012 02:00

спасибо огромное, разобрался)

goodguy 13.01.2012 07:37

Цитата:

Сообщение от Stitch512 (Сообщение 1056374)
Не нужно промежуточный, можно вот так например.
Код 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 соответствующего размера.

Это и будет промежуточный объект

Stitch512 13.01.2012 14:37

Это не промежуточный - это собственно те данные которые и будут отображаться в Bitmap-е.


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

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