4

それぞれ約 500 フレームで構成されるフルスクリーン アニメーションをいくつか作成する必要があるとします。アニメーションは妥当な速度で再生する必要があります (おそらく 20 fps 未満ではありません)。

どのような方法を使用すればよいと思いますか?

これまでのところ、私は試しました:

1. storing each frame as a compressed JPEG
2. before animation starts, loading each frame into a byteArray
3. as the animation plays, decode corresponding byteArray into a bitmap
and draw it on a surface view.

問題 - 速度が遅すぎます。通常は約 5 ~ 10 FPS です。

他に2つのオプションを考えました。

  1. すべてのアニメーションを 1 つのムービー ファイルに変換します...しかし、開始、一時停止、および正確なフレームへのシークに問題がある可能性があると思います...どう思いますか?

  2. 私が考えた別のオプションは、アニメーションをフレームごとに再生するために OPENGL を使用することでした (これまでは使用したことがありませんでした)。どう思いますか、openglはそれを処理できますか?

ありがとう!


編集して、talkingtom を覗いてみると、このように圧縮された約 20 メガの JPEG が含まれていることがわかりました。

ここに画像の説明を入力

4

3 に答える 3

3

いくつかの異なる方法でそれを処理できます。

  1. デコードがボトルネックのようです。アニメーションを再生する前に、デコードを含む 3 つの手順をすべて実行してみると、変換済みのビットマップを描画するだけで済みます。

  2. OpenGL は、ボトルネックになることはおそらくないという意味で、間違いなく仕事をこなしています。しかし、上で述べたように、図面は問題ではないようです。

  3. デバイスでのアニメーション。幾何学的オブジェクトまたはピックスマップをアニメーション化しており、アニメーションに再利用できる共通の背景がある場合は、アニメーションを「アクター」に分けて移動させます。これにより、必要なデータが大幅に少なくなります。

編集 : モバイル デバイスの複雑なアニメーションがフルスクリーンのムービーや一連の画像になることはめったにありません - (冗長な) データの量は圧倒されます (すでにお気づきのとおり)。それらはアニメーション化された 2D および 3D モデルです。3D の場合は OpenGL を使用することをお勧めします。2D の場合は、一般的なキャンバスの描画で十分です。さらに効率的にするために、モデルを別々のパーツに分割し、別々にアニメーション化することができます (サウスパークのアニメーションに似ています)。これをスプライトシート (別々の小さなムービー ストリップなど) と組み合わせて、別々の部分をアニメーション化できます。これにより、圧縮されたムービーよりも少ないデータを使用しながら、柔軟性が大幅に向上します。

于 2012-11-12T11:37:10.447 に答える
2

それを映画ファイルに変換する必要があると本当に思います-これにより、適切な圧縮が得られ、Androidはメディアプレーヤーですべての作業を実行できます。適切なフレームに到達するのはかなり簡単だと思いますが、これを機能させるには、ビデオ ストリームでより低い圧縮を使用する必要がある場合があります。

于 2012-11-12T11:35:15.787 に答える
1

ユニバーサル トゥイーン エンジンを使用すると、パフォーマンスの問題を解決できる場合があります。

于 2012-11-12T11:36:28.443 に答える