feb19.jp blog - life is creative!

ランタイムビットマップキャッシュ(.cacheAsBitmap)

ブックマークに追加する tags:    

ランタイムビットマップキャッシュ(.cacheAsBitmap)

.cacheAsBitmapは使い所によっては凄く便利だと言うのは知っていて時々使っているのだけど、どうもよく分かっていなかったので、何故効果が現れないのか混乱することがしばしば(というか逆効果になったりするし)。というわけで頭の整理を行うために.cacheAsBitmapについてまとめてみました。

.cacheAsBitmapというのは、Flash Player 8から搭載された描画を高速にするためのMovieClip(またはButton)プロパティです。Boolean型です。mc.cacheAsBitmap = true;なんつって使います。

これがどういう処理を行っているかと言うと、詳しくは理解していないので中途半端な説明になってしまいますが、Flashはオブジェクトを描画する際に、毎フレームに渡って様々なプロパティ(位置やサイズ、拡大縮小、回転、色など)を計算し、それに基づいた上で画面に表示するためのビットマップデータを作成、つまりレンダリングを行います。そして最後に_visibleなどがtrueかfalseかによって表示を行うのですが、毎フレームプロパティを計算していたのでは、たとえば沢山のパス情報を持ったベクターグラフィックをモーションさせるさせると、処理が重くなってしまいます(パスの多いベクターグラフィックは計算が複雑なのです)。

そこで、.cacheAsBitmapを使うことで、一度レンダリングしたビットマップをキャッシュに残しておいて、前のフレームと同じであれば、再レンダリングを行わないで、キャッシュされたビットマップを使う、ということが可能になるのです。

しかしこの処理は処理で計算を持っていかれるので、使いどころを間違えると効果が現れないどころか、逆効果になってしまう場合があります。

拡大縮小を行ったり、回転などを行うと.cacheAsBitmapはこのMovieClipはキャッシュに残っているビットマップとは違うと判断し、再度レンダリングしなおします。そしてさらに.cacheAsBitmapはその新しく作成したビットマップをキャッシュに放り込みます。処理が余計増えていることがお気づきになると思います。

AS2.0ですと、「_alpha」、「_height」、「_rotation」、「_width」、「_xscale」、「_yscale」、「blendMode」、「filters」、「opaqueBackground」、「transform」などのプロパティが変化させられているとビットマップ化を再度行うので、これらを行わない「_x」と「_y」、つまり位置情報変化のみのモーションの場合は.cacheAsBitmapは効果を発揮します。

Flashドキュメンテーション「キャッシュを有効にする状況」を読むとより正確で詳しい情報が得られると思いますのでご一読ください。

.cacheAsBitmapについて検索していると、ムービークリップにBevelFilterやColorMatrixFilterなどのBitmapFilterを適用することで、.cacheAsBitmapが自動的にtrueに設定されると書かれている記事がありました(Flash Memo for Designers: キャッシュを有効にしてアニメーションを高速にする - cacheAsBitmap)。

フィルターを適用したMovieClipをアニメーションさせた場合、何故これほどまでに重いのかという原因がここにあるようです。

さらに.cacheAsBitmapを設定しているオブジェクトを透過したときに、内部のオブジェクトの透過処理が変わるという記事がありました(_quality | cacheAsBitmap設定時の特徴:透過処理)。

ベクターグラフィックを重ねて作ったイラスト(を閉じたムービークリップ)を透過させた場合、すごく気持ち悪いことになるのですが、.cacheAsBitmapを適用していると処理的にビットマップデータを透過するというかたちになるのでしょうか。

ちなみに.cacheAsBitmapは、ムービークリップやボタンのプロパティパネルにある、「ランタイムビットマップを有効にする」のチェックを入れることでtrueにすることも出来ます。

いやはやFlashは奥が深い。

2007年07月11日13:52

Webデザインブログ

「ランタイムビットマップキャッシュ(.cacheAsBitmap)」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

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

Navigation

古:Flash周りのキャッシュ対策
新:Flash RemotingとAMF
トップページ

Recently Entries
Flash 上でパブリッシュしたとき、型宣言されていない変数・関数があったら警告を出す
Flex SDK (mxmlc)や Flex Builder とかで...
Flash Builder 4 Standard 導入
色々メモリリークチェックとか出来る Premium は必要になってか...
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...