1

現在、SurfaceViewを使用してAndroid用のタブレットデバイス用のゲームを作成しようとしています。私はスプライトを持っていますが、スプライトシート全体(すべてのアニメーションを含む)を使用するか、画像ファイルでスプライトを分離するかどうかに苦労しています。

たとえば、私のスプライトシートの名前はbear.pngで、16枚の画像が含まれています。Rectを使用してそれらを美しくアニメーション化できます(これについてはmybringbackに感謝します):

canvas.drawBitmap(bitmap, rectSrc, rectDest, null);

しかし、そうすることで、最終的にヒープサイズよりも大きくなるのではないかと心配しています。

ただし、別の方法があります。各画像(bear1.png、bear2.pngからbear16.pngまで)を分離することで、これらのスプライトを使用してアニメーションを作成することもできます。

Bitmap bitmap = Bitmap.decodeResource(context.getResources(), context.getResources().getIdentifier("bear" + index, "drawable", "com.example.game"));

次に、それをキャンバスに呼び出します。

canvas.drawBitmap(bitmap, bitmapX, bitmapY, null);

今のところこれも問題なく動作します。もちろん、一度に1つの画像しか使用しないため、ヒープサイズが大幅に削減されます。しかし、それは..なぜなら、ほとんどの場合、Bitmap.decodeResource()を思い出しているので、一度に多くのアニメーションを組み合わせると、大幅な遅延が発生する可能性があるのではないかと心配しています。

つまり、
-スプライトシート:ヒープサイズが増加しますが(最終的にはOutOfMemoryエラーが発生する可能性があります)、パフォーマンスが向上
します-異なる画像ファイルのスプライト:ヒープサイズが減少しますが、パフォーマンスが低下する可能性があります

どのアプローチを使用するか完全にはわかりません。2番目の方法(異なる画像ファイルのスプライト)を使用しても、実際には問題ありませんか?それとも、スプライトシートだけの方が良いでしょうか?

4

1 に答える 1

0

気にしないで、私は自分の質問に答えただけです。実際のスプライトシートをレンダリングして。を使用するのではなく、すべての反復でのレンダリング Bitmap.decodeResource() がキャンバス全体より遅れているようRectです。inSampleSizeパフォーマンス面では、キャンバスでラグが大きすぎる場合は、を使用または使用して画像を縮小する以外に方法はありませんGLSurfaceView

于 2013-02-04T13:16:54.277 に答える