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オブジェクトを返すので、基本的に結果は同じですよね?2番目の例では、_sampleTile.clone()を_sampleTileに置き換えた場合、_sampleTileへの参照を配列に格納せずに、_simpleTileから実際のbitmapDataを取得することはどういうわけか可能ですか?

4

1 に答える 1

1

いいえ、反復ごとに新しい BitmapData を作成する必要があります... clone() または new のいずれかを使用します。

ただし、いくつかの選択肢があります。

  • 作成を非同期にします。バッチ全体を完了するまで、各フレームで数回だけ実行します。
  • 大きな BitmapData を作成し、そこにすべてのタイルを描画し、各タイルの位置の参照を使用します。タイルが常に同じである場合、アプリケーションを実行するたびにタイルを作成するのではなく、最終的に BitmapData + 位置を保存してロードすることができます。
于 2010-11-17T16:24:38.287 に答える