速いFlash/ActionScriptチューニング入門
連載インデックスへ
速いFlash/ActionScriptチューニング入門(2)

Flashで吹雪のごとき描画を実現するチューニング3策

チームラボ株式会社
河北 啓史
2010/4/19


【2】Flash Playerに情報を保持「ビットマップキャッシュ」

- PR -

 ベクタ形式を使いつつも、ビットマップの描画速度を実現する。そんな要求を満たしてくれる便利な機能がFlashには備わっています。それは「ビットマップキャッシュ」という機能です。ビットマップキャッシュは、ベクタを描画するためにFlash Playerが内部的に作ったピクセル情報を消さずに残し、以降はそれを用いることで描画を高速化するという機能です。

「ビットマップキャッシュ」を使うには

 Flash Pro CS4でこの機能を利用には、ステージに配置されたMovieClipを選択した後、プロパティパネルの[ビットマップとしてキャッシュ]にチェックを入れてください。

 CS3の場合は、[ランタイムビットマップキャッシュを使用する]です。

 また、この機能をASから動的に設定する場合は、MovieClip継承クラスのインスタンスに対し、以下を記述することで設定可能です。

cacheAsBitmap = true;
 

「ビットマップキャッシュ」を使うと

 では、実際にビットマップキャッシュの有無で描画速度どれほどの差が出るのかを体感してもらいましょう、試しに下の例を実行してみてください。かなりのスコアアップを体感できると思います。

ビットマップキャッシュにより高速化された例

 このように、ラスタ形式の素材を用意することなく描画を高速化できるため、非常に便利です。

「ビットマップキャッシュ」の弱点

 しかし、このように便利なビットマップキャッシュ機能にも、注意しなければならないことがあります。

 ビットマップキャッシュを有効にしていたとしても、rotation、scaleX、widthといった、形状そのものが変化するような値を変更してしまうと、その都度キャッシュ処理が実行され直されてしまいます。以下に示すように、効果が得られなくなってしまうのです。

rotationの変更により、毎フレームの形状が変化するために効果が出ていない例

 また、ビットマップキャッシュは、キャッシュを保持する都合上メモリを食いやすいため、サイズの大きなMovieClipなどに適用する際には注意が必要です。

POINT 「TextFieldには、ビットマップキャッシュが有効」
ビットマップキャッシュは、このような性質からTextFieldとの相性が、非常に良いです。表示文字列やサイズが頻繁に変化しないTextFieldでは、基本的にビットマップキャッシュを有効にしておくことを強くお勧めします。

 さて、ビットマップキャッシュを利用するだけでも、かなりの高速化が見込めましたが、弱点が出てきてしまいました。それでは実制作で使う機会が損なわれてしまいます。しかし、それでも高速化したいですよね。そこで、次ページではその弱点を克服する方法として「プリレンダリング」という方法を紹介したいと思います。

1-2-3-4

 INDEX
速いFlash/ActionScriptチューニング入門(2) 
Flashで吹雪のごとき描画を実現するチューニング3策
  Page1
Flash高速化は、ASの知識有無にかかわらず
  Page2
【1】ベクタとラスタを使い分ける
Page3
【2】Flash Playerに情報を保持「ビットマップキャッシュ」
POINT 「TextFieldには、ビットマップキャッシュが有効」!
  Page4
【3】あらかじめ描画の準備「プリレンダリング」
POINT 「BitmapDataの配列をクラスメンバとして定義」
注意! 「FlashのBitmapDataの限界サイズ」
注意! 「やり過ぎると、スクリプトタイムアウト」
たかがイベント処理と侮るなかれ


「デザインハック」コーナーへ


TechTargetジャパン

リッチクライアント & 帳票 フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH