« Twitter弾幕シューティング「Bulletter」作った | メイン | クリスマスネタゲーム作ってみた »

ビットマップキャッシュの注意点

久々に Flash/ActionScript に関するエントリ。
意外とあまり語られていないビットマップキャッシュの注意点について。

cacheAsBitmapプロパティによって設定できるビットマップキャッシュは文字通り、シンボルをビットマップとしてキャッシュすることで平行移動時の描画負荷を格段に下げることのできる機能です。
拡大/縮小したり回転させたりとシンボル自体の外形を変化させるとその都度キャッシュ処理が行われるため、毎フレーム変化するような場合はメモリ消費が激しくなり結果的に負荷が高くなってしまいます。


と、ここまではよく知られている内容。


実はマスクと併用してはいけません

マスクされているシンボル内ではどこに置こうが毎フレーム再キャッシュ対象になります。
たとえマスク領域内にシンボル全体が表示されていようと変わりません。
試しにシンボル3000個を動かすサンプルを作ってみたところ、マスクをかけた状態では逆に重くなりました……かなりガビガビ。
おそらくシンボルごとにマスクによる表示範囲を再計算しているのでしょうが、ヘルプにも載っていない盲点だったりするので注意が必要です。

どうしても表示範囲を限定したい場合は、その領域だけをくり抜いた巨大なシェイプを上に重ねれば代用できます。
これだとマスクによる再描画処理は発生しないので、安心してビットマップキャッシュを設定することができます。
ものによってはレイヤー構造がかなり複雑になるのでバッドノウハウ気味ですが、動きの小気味よさを追求するならビットマップキャッシュの有無に関わらずマスクは極力避けた方がいいでしょう。


グラデーションマスクをかけたい場合は逆にビットマップキャッシュが必須なので、この限りではありません。
大量のシンボルを平行移動させるような状況の時だけ意識すればいいと思います。


[追記]
ビットマップキャッシュが自動的にONになるフィルタ系は総じて上記の影響受けます。
移動するシンボル内にフィルタ付のシンボルを置いても同じです。
とにかくマスク内ではどうあがいてもダメっぽい。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/109

コメントを投稿

あわせて読みたい