2011-12-22 8 views
0

複雑なアニメーションをベクトルからビットマップに変換しています。アニメーションがメインのタイムラインにあるときにビットマップに変換するのは簡単です。しかし、アニメーション内にアニメーションがあると、すべての再生ヘッドを再帰的に移動する必要があるため、すべてが非常に乱雑になります。MovieClipとそのすべての子の再生ヘッドを移動する

これを達成する別の方法はありますか?たとえば、MovieClipのplayメソッドを実行すると、すべてのアニメーションが正常に動作しますが、遅すぎます(アプリケーションの各フレームごとに1つのフレームしか変換できません)。

+1

複雑なアニメーションをベクトルからビットマップに変換することは、正確にはどういう意味ですか?どのようにこれをやっている?多分いくつかのコード? – annonymously

+0

簡単ですが、BitmapDataクラスを使用してアニメーションMovieClipをスプライトにラスター化しています。これは、ゲームのパフォーマンスを向上させるための一般的な方法です。 – miguelSantirso

+1

「再生ヘッドを移動する」とはどういう意味ですか? gotoAndStop()?あなたが各ムービークリップを見て、フレームごとにラスタライズしているのであれば、私の意見はプロを上回ると言えます。ああ、なぜビットマップにアニメーションをラスタライズする必要がありますか?もしそれらがたくさんあるならば、おそらくベクトルよりもビットマップを使ってそれを行うには、より多くの処理能力が必要になります。 – annonymously

答えて

0

パフォーマンスを節約するために、フレームごとにムービークリップをラスタライズする必要はありません。それは単に何かをスピードアップすることはできません。これについて考えてみましょう。Flashレンダラはムービークリップを既にラスターイメージに変換して画面に表示できるので、なぜそれを2回繰り返すのですか?

レンダラーが既に行っているラスタライズキャッシュへの道です。そうであれば、それは非常に簡単です。

var mc:MovieClip = new MovieClip(); 
mc.chacheAsBitmap = true; 

プロパティは、DisplayObjectで定義されています。また、Flash IDEでこれを行うこともできます。 のプロパティ>表示の下にあるチェックボックスです。

最後に、ムービークリップがフレームごとに変更されている場合は、ビットマップとしてキャッシングしても、レンダラはフレームごとにラスタライズする必要があるため、パフォーマンスが向上しません。 ムービークリップが同じ行にある複数のフレームで同じ場合は、ラスタライズ処理を避けるためにキャッシュしてください。

+0

ラスタライズには2つの理由があります。最初は、ゲームプレイ中のフレームレートが一定であることを保証することです。私は 'cacheAsBitmap'属性を使いたいと思っていますが、期待通りにうまく動作しません(私たちはそのオプションもテストしました)。 2番目の理由は、帯域幅の使用量を減らすことです。ゲームのラスター化されたグラフィックスは約300 MBを占めますが、ゲームはベクターグラフィックスを0.25 MBだけダウンロードします。 – miguelSantirso

+0

あなたが私を信じない場合... http://www.bytearray.org/?p=290 :) – miguelSantirso

+0

私たちはお互いを誤解しました。あなたの記事から、「このDisplayObjectをxとyに移動するだけでなく、各フレームについて、Flash Playerはスクリーンを更新する前にメモリ上にキャッシュされたコピーを更新しています。私が言ったように、あなたのムービークリップがすべてのフレームを変更している場合、それをビットマップとしてキャッシュしてもパフォーマンスは向上しません。この記事では、意図していないことを実行できないためにcacheAsBitmapを終了します。あなたが望むテクニックは、blittingと呼ばれます。私の例を更新します。一方、http://www.adobe.com/devnet/flash/articles/blitting_mcをご覧ください。html –

関連する問題