2012-06-28 3 views
1

У меня есть эта функция внутри класса, который создает растровое изображение любого объекта DisplayObject, который я передаю. Как вы увидите, каждый раз, когда я создаю новый растровый образ, я создаю новый объект BitmapData и новый объект Bitmap.AS3 - Самый эффективный метод обновления растрового изображения

Есть ли способ настроить эту функцию, поэтому мне больше не нужно воссоздавать эти два объекта каждый раз, когда я запускаю функцию?

private var bitmapData:BitmapData; 
private var bm:Bitmap; 

crop(someSprite.width, someSprite.height, someSprite); 

private function crop(_width:Number, _height:Number, displayObject:DisplayObject):void { 

bitmapData.dispose(); 
bitmapData = new BitmapData(_width, _height, false, 0xFFFFFFFF); 
bitmapData.draw(displayObject); 

bm = null; 
bm = new Bitmap(bitmapData, PixelSnapping.ALWAYS, true); 
bm.smoothing = true; 
bm.alpha = 0; 

} 

Спасибо,

Марк

ответ

2

Если дисплей размеры объекта меняются каждый раз, вам придется воссоздать BitmapData каждый раз.

Для объекта Bitmap его не нужно воссоздавать. Вы можете просто установить растровые данные непосредственно:

bm.bitmapData = bitmapData; 
+0

Хорошо спасибо. По крайней мере, это еще один «новый», который я использую. – crooksy88

2

Если вы хотите, чтобы избежать создания нового BitmapData каждый раз, когда вы просто создать один BitmapData в самых больших размерах вы ожидаете один раз и в методе растениеводства вы первый ясно, что карта с использованием yourMap.fillRect (yourMap.rect, 0), а затем выполните ничью в верхнем правом углу с помощью прямоугольника клипа с размерами обрезки. Для дополнительного крошечного повышения производительности вы можете установить свойство ScrollRect объекта Bitmap, которое отображает его в обрезанных размерах.

+0

Спасибо за информацию. Хотя я немного потерял. Что такое объект yourMap и как это применимо к приведенному выше примеру? – crooksy88

+0

yourMap будет одной битмапдой в максимальных ожидаемых измерениях, которые вы создаете один раз, а затем повторно используете все время. Единственная проблема в том, что если вы используете свой метод crop() больше как утилита для общих битмапдатов, этот подход не будет работать, поскольку, если у вас есть только один экземпляр yourMap, он изменит представление для всех растровых изображений, которые его используют, всякий раз, когда вы вызываете растениеводство. – Quasimondo

Смежные вопросы