Как избежать создания нового объекта bitmapData в цикле в AS3? - PullRequest
0 голосов
/ 17 ноября 2010

Я хочу сохранить растровые данные из _sampleTile в массиве, но мне было интересно, как повысить производительность. Если я сделаю это так:

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 Ответ

1 голос
/ 17 ноября 2010

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

Хотя я вижу несколько альтернатив:

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