2011-08-06 18 views
3

私はちょうどJavaのKiller Game Programmingとそのチュートリアルの中で、特に普及しているようなテクニックを使って、簡単なゲームループを作りました。Here バックが付いたシンプルなタイムドゲームルップバッファ。SurfaceViewのゲーム・ループが適切なFPSを実行できないのはなぜですか?

問題は、良いFPSで画面を再描画しないことです。私がモトローラXoomから出ることができる最高のものは、24Fを目指して15FPSです。

私がバックバッファーの半分の大きさであれば、スピードがかなり上がりますので、問題が起こっていると思われますXoomの画面(SurfaceViewのサイズは1280x727です)...まだ同じサイズで完璧に動作するように見える他のゲーム。

私はテストする他のデバイスがありませんので、私は現時点で何をするには少し固執しています。

私は何が間違っているの/行方不明/無知なのですか?

+1

プロファイル! Traceviewはあなたの友人です。 http://developer.android.com/guide/developing/debugging/debugging-tracing.htmlプロファイルを作成した後、詳細情報を使用して質問を更新してください – smith324

+0

ありがとうございます。ちょうど私が必要なもの。 – Stretch

+0

私がプロファイラから作ることができたことは、バッファをSurfaceViewキャンバスに描画する際に負荷の98%をかけることでした。 – Stretch

答えて

10

多分ビットマップを描画するたびに変換を引き起こすあなたのビットマップと表面のピクセル形式が異なりますか?それは確かにオーバーヘッドを引き起こすでしょう。それが役立つかどうかを確認するには、SurfaceHolder.setFormat()を試してみてください。

ビットマップでBitmap.Config.ARGB_8888が使用されているため、サーフェスホルダーのフォーマットをPixelFormat.RGBA_8888に設定できます。または可能であれば、Bitmap.Config.RGB_565PixelFormat.RGB_565を試してみてください。

+0

これはお金の上にあった。ありがとうございました。バッファビットマップのフォーマットをRGB_565に変更し、スムーズに最大約50フレーム/秒で動作します。 – Stretch

+0

良い!互換性の問題の可能性に注意してください。デフォルトのピクセル形式を変更する場合、いくつかのデバイスでテストすることをお勧めします。あなたのケースでは大丈夫だと思いますが、OpenGLを使って同様のことをするときに色の問題が2つありました。 – olivierg

+0

ここでのあなたの答えは、無関係な問題を解決するのに役立ちました。私の 'SurfaceView'に' PixelFormat.RGBA_8888'を適用することで、デフォルトではARGB_8888ではないことが明らかです。 – Trevor

0

コードが必要ですが、スレッドを使用していないと思われますか?スレッドを使用していない場合、プログラムは不安定になり、すべての処理が同じスレッド上にあるため、かなり頻繁にクラッシュします。

要するに、新しいスレッドを作成したことを確認してください。それはあなたの最善のルートを行くかもしれないかもしれない

+0

はい。私はスレッドを使用しています。私の実装はかなり正確に指定されたリンクであるため、私はコードを投稿しませんでした。 – Stretch

+0

コードが必要になりました – Chris