2

これらのトピックはすでに打ちのめされていると思いますが、答えを見つけることができなかった非常に具体的な質問があります.

私が自分のプログラムで行っていることは、いくつかのアート アセットを埋め込んで使用し、複数のモバイル プラットフォームをサポートするようにスケーリングしてから、自分の道を進んでいくことです。

ビットマップ キャッシュは、モバイル アプリケーションのパフォーマンスを改善するための優れたアプローチであると読みました。埋め込みアセットに関して、これは単に埋め込みアセットの 1 つのインスタンスを作成し、それを複数回使用するという行為ですか? 例えば:

[Embed(source = "png.png")] private static var img:Class;
private static var data:BitmapData = new img().bitmapData;

private var bmp1:Bitmap = new Bitmap(data); private var bmp2:Bitmap = new Bitmap(data);

この場合、「new」キーワードを使用して作成されたすべてのアセットは、メモリに保存された画像の単一のインスタンスを参照し、メモリ内の別の場所に独自のコピーを作成すると思いますか?

cacheAsBitmap次に、クラスのおよびcacheAsBitmapMatrixパラメータに関して、Bitmapこれらのプロパティを設定すると、埋め込みアセットを使用するときに何かが行われますか?

scaleX最後に、AS3 でビットマップをスケーリングする場合、クラスのとscaleYプロパティを使用する方が効率的ですか、それともスケール マトリックスを使用してBitmapを再描画する方がよいですか?BitmapData

助けてくれてありがとう!

4

1 に答える 1

2

はい、埋め込みファイルから抽出した BitmapData のインスタンスは 1 つだけです。これはメモリを節約しますが、その BitmapData を変更すると、それを参照するすべての Bitmap に影響することを意味します - ただし、BitmapData 自体を編集したくない場合、または編集した場合にすべてを更新したい場合、これは問題ではありません.

newキーワードで作成された各 Bitmap は、メモリ内の一意のオブジェクトになりますが、それらはすべてdata、コンテンツに対して同じ BitmapData ( ) を参照します。BitmapData をピクセル データのコア記述と考え、Bitmap をそのデータを可能にするラッパーと考えてください。ステージで描きました。コード内で作成した各 Bitmap は、同じ BitmapData を参照します。Bitmap にデータの一意のコピーを提供する場合は、それをインスタンス化します。

var uniqueBitmap:Bitmap = new Bitmap(data.clone());

...後でこれにアクセスしたい場合は、Bitmap インスタンスを介してアクセスできます。

uniqueBitmap.bitmapData;

ただし、これによりメモリ内に別の BitmapData オブジェクトが作成されるため、実際に個別に操作する必要がある場合にのみこれを行ってください。

2番目の部分については、スケーリングが純粋な視覚効果(ゲーム内など)のためであり、十分に頻繁に行われる場合、個人的にはラッパーBitmapのscaleXとscaleYを使用します.Matrixを使用してもBitmapDataのサイズは変更されません.特にモバイル デバイスをターゲットにしている場合は、毎回新しい BitmapData インスタンスを作成するため、一般的な変換にこのメソッドを使用することは理想的ではない可能性があります。それはあなたの目的次第です。あなたが何をしようとしているのか聞いてもいいですか?

于 2012-10-22T23:33:42.627 に答える