如何避免在AS3中循环创建新的bitmapData对象?

时间:2010-11-17 15:11:37

标签: actionscript-3 reference bitmapdata

我想将_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替换_sampleTile.clone() - 是否有可能不在数组中存储对_sampleTile的引用,但是从_simpleTile获取实际的bitmapData?

1 个答案:

答案 0 :(得分:1)

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

我看到了几个选择:

  • 让您的创作异步。每个框架只做几个,直到你完成整批。
  • 创建一个大的BitmapData,在那里绘制所有的tile,并使用引用来获取每个tile的位置。如果tile始终相同,那么最终可以保存最终的BitmapData +位置并加载它们,而不是每次运行应用程序时都创建它们。