8

私のゲームでは、GLSurfaceViewRelativeLayout を使用して上に UI 要素 (経過時間を表示するための TextView、ゲームを一時停止/再開するためのボタン) を描画することを考えています...

今までUI要素はすべて自分で直接surfaceViewに描画していましたが、Android UIの幅広い選択肢(フォントや色の書体の変更など)を考えて利用することにしました。

質問:

  • 上にUI要素を描画するのは良い習慣ですか、GLSurfaceViewそれともすべてのUI要素を自分で直接描画する方が良いGLSurfaceViewですか?
  • メソッドを使用して、UI 要素 (Say TextView) のコンテンツを定期的に (16 ミリ秒ごとに)更新しrunOnUiThread()ます...これは悪いことですか?
  • 私のゲームは強制終了の影響を受けますか?

glViewこれは、RelativeLayout をセットアップするために使用しているテスト Java コードです...GLSurfaceViewインスタンスです。

    rl = new RelativeLayout(this);
    rl.addView(glView);        
    tv = new TextView(this);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.ALIGN_TOP);
    tv.setLayoutParams(lp);
    tv.setText("FPS: 0");
    tv.setBackgroundColor(0x4060ff70);
    rl.addView(tv);

    setContentView(rl);
4

2 に答える 2

3

私は現在、私が作成している Android ゲームでこれを行っているので、私の経験を共有したいと思いました。

GLSurfaceView の上に UI 要素を描画するのは良い習慣ですか、それともすべての UI 要素を GLSurfaceView に直接描画する方が良いですか?

個人的には、Android が提供する組み込みの UI ウィジェットを使用して UI を描画することをお勧めします。ゲーム エリア内でドラッグできる UI コントロールや、複雑なアニメーションや動作を持つ UI コントロールなど、適切でない特定の状況があります。

ボタンと textViews を使用している場合は、提案するアプローチをお勧めします。

runOnUiThread() メソッドを使用して、UI 要素 (TextView と言う) のコンテンツを定期的に (16 ミリ秒ごとに) 更新します...これは悪いことですか?

私のゲームは強制終了の影響を受けますか?

同じシステムを使用して UI コンポーネントを更新しています。16 ミリ秒ごとに更新する必要はありませんが、強制終了や応答しない UI の問題はありません。

多くの (10 ~ 20 以上の) コンポーネントが定期的に更新されている場合、応答しない UI の問題が発生する可能性があります。

16ms (約 60FPS) ごとにビューを更新する必要がありますか? 基礎となる値を更新して正しいロジックを維持することができますが、必要に応じて、20 ~ 30 FPS ごとにビューを更新して、UI スレッドで実行される量を減らすことができます。

UI は openGL ビューほど頻繁に更新する必要はないと思います。textView が 1 秒あたり 20 回更新された場合でも、常に変化しているように感じられます。

于 2013-03-05T15:23:01.880 に答える
3
  • GLSurfaceView の上に UI 要素を描画するのは良い習慣ですか、それともすべての UI 要素を GLSurfaceView に直接描画する方が良いですか?

Android レイアウト システムが提供する柔軟性が必要な場合は、GLSurfaceView の上に Android コントロールを描画することをお勧めします。ただし、これらのコントロールは glSurfaceView よりもはるかにゆっくりと描画される可能性があることに注意してください。そのため、UI のレンダリングに必要なグラフィカル パワーが多すぎず、更新が速すぎないようにしてください。

自分ですべてをレンダリングすることもできますが、Android UI システムから取得できるすべての機能が失われます。

  • runOnUiThread() メソッドを使用して、UI 要素 (TextView と言う) のコンテンツを定期的に (16 ミリ秒ごとに) 更新します...これは悪いことですか?

私にはいいですね。

  • 私のゲームは強制終了の影響を受けますか?

これは他の質問とは何の関係もありません。適切な使用法に従い、例外がスローされなければ問題ありません。例外を発生させた場合、アプリは強制的に閉じられます (例外を適切に処理しない限り)。

于 2013-01-10T19:06:06.107 に答える