2010-11-17 4 views
0

Я хочу сохранить данные растрового изображения из массива _sampleTile в массиве, но мне было интересно, как увеличить производительность. Если я сделаю так вот так:Как избежать создания нового объекта bitmapData в цикле в AS3?

var _sampleTile:BitmapData; 
var _arrayLenght:int = _tileClipArray.length; 
for(var i:int = 0; i < _arrayLenght; ++i){ 
    _sampleTile = new BitmapData(65, 65, false); 
_sampleTile.draw(_tileClipArray[int(i)]); 
_tileBitmapDataArray[i] = _sampleTile; 
} 

Тогда это сделало бы слишком много строительной работы в петле, не так ли? Но если я, как ниже:

var _sampleTile:BitmapData = new BitmapData(65, 65, false); 
var _arrayLenght:int = _tileClipArray.length; 
for(var i:int = 0; i < _arrayLenght; ++i){ 
_sampleTile.fillRect(_sourceRectangle, 0x00FFFFFF); 
_sampleTile.draw(_tileClipArray[int(i)]); 
_tileBitmapDataArray[i] = _sampleTile.clone(); 
} 

В .clone() возвращает новый объект BitmapData поэтому в основном результат тот же, верно? Во втором примере, если мы заменим _sampleTile.clone() на _sampleTile - можно ли как-то не хранить в массиве ссылку на _sampleTile, а получить фактические bitmapData из _simpleTile?

ответ

1

Нет, вам нужно создать новую BitmapData для каждой итерации ... либо с помощью clone() или new.

я вижу пару альтернатив, хотя:

  • Сделайте асинхронное создание. Сделайте всего несколько кадров, пока не закончите всю партию.
  • Создайте большую BitmapData, нарисуйте все плитки там и используйте ссылки для положения каждой плитки. Если плитки всегда совпадают, вы можете в конечном итоге сохранить конечные позиции BitmapData + и загружать их, а не создавать их каждый раз при запуске приложения.
+0

Знаете ли вы какой-то пакет бенчмаркинга для as3, где я могу тестировать функции? как быстро они бегут? Я хочу сравнить clone() с новым. – Rihards

+0

Попробуйте следующее: http://gskinner.com/blog/archives/2010/02/performancetest.html – Cay

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