2012-02-08 10 views
1

私は現在、Canvas.drawBitmap()を使用してにBitmapを描画しています。これは本当に私のフレームレートを減らすように思え、私はこれを解決するために何ができるのだろうと思っていた。私はonDraw()メソッドの外で作成したビットマップを参照しています。私は、画像が小さく、不透明で、ピクセルフォーマットが一致していることなどを確認しました。私が画像を描かない場合、フレームレートは約10-15FPSだけ上がります。これをスピードアップするためのアイデアはありますか?私は目立つ遅れを経験する。SurfaceViewの背景としてビットマップを描画する

私は

private Bitmap bitmapPlayer = BitmapFactory.decodeResource(getResources(), R.drawable.player); 

はその後、私のonDraw()メソッド...

canvas.drawBitmap(bitmapPlayer, null, drawingRect, null); // drawingRect is the Rect to draw the Bitmap inside of 
// ... Rest of drawing code 
+0

こんにちは、あなたのコードを投稿できますか?オブジェクトへの参照を渡す場合は、大規模なドロップを表示する必要はありません。 – garyamorris

+1

@garyamorris私はポストをいくつかのコードで更新しました。ゲームはまだ再生可能ですが、私は、ビットマップを描画しないと、ゲームがスムーズに実行されることに気付きます。 –

答えて

1

に私はあなたがあなたに何かロジック重いをしているだけと仮定することができます...すべての外のビットマップを作成ドローコール、コードと次の例との間に相違がない場合は、

http://www.droidnova.com/playing-with-graphics-in-android-part-iii,176.html

私は次のことを見て、グラフィックハードウェアをあなたの図面に利用することになります。

http://developer.android.com/resources/articles/glsurfaceview.html

希望これは、あなたが背景に使用しているビットマップ

+0

リンクをありがとう、すべてが大丈夫に見えます。私は多くの計算が行われていますが、ゲームは 'canvas.drawBitmap()'コールなしで〜50fpsでスムーズに実行されます。私がそれを追加すると、それは〜40fpsになります。そして、数秒ごとに遅れがあることに気がつき、次に数秒間スムーズにレンダリングを続けます...すべてがdrawBitmap()呼び出しなしでスムーズに実行されます。 –

+0

多分OpenGLが私の唯一の選択肢です。それはショットの価値がある、私はそれにいくらか親しんでいるが、私はこのゲームのためにそれを避けようとしていた。 –

+0

私は習慣を壊そうとしていますが、恐らく私はfpsに執着する傾向があります。幸運 – garyamorris

0

どのように大規模であるのに役立ちます。オーバーサイズでサイズが1つしかなく、hdpi、mdpiなどで作成されていない場合は、不必要に大きなイメージを参照している可能性があります。このような場合は、BitmapFactoryクラスを使用して、キャンバスの幅と高さに一致するイメージの縮小版を作成します。

P.S.それらが最も効率的であるので、png画像が推奨されます。

+0

アイデアありがとう、私は別の画面サイズのために別々の画像を持っているし、それらはすべてpngの...私は完全に適合するようにそれらを拡大しようとし、おそらくそれが役立つだろう。 'Canvas.drawBitmap()'メソッドで自動的に行うスケーリングを減らすこともできます。 –

関連する問題