0

我想将 _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 的引用,而是从 _simpleTile 获取实际的 bitmapData?

4

1 回答 1

1

不,您需要在每次迭代中创建一个新的 BitmapData ... 使用 clone() 或 new。

我看到了几个替代方案:

  • 使您的创建异步。每帧只做几个,直到你完成整个批次。
  • 创建一个大的 BitmapData,在其中绘制所有图块,并为每个图块的位置使用参考。如果图块始终相同,那么您最终可以保存最终的 BitmapData + 位置并加载它们,而不是每次运行应用程序时都创建它们。
于 2010-11-17T16:24:38.287 回答