Androidゲームで使用するスレッドの数はいくつですか?


28

少なくとも、OpenGL AndroidゲームにはUIスレッドとによって作成されたレンダラースレッドがありGLSurfaceViewます。 Renderer.onDrawFrame()最大のFPSを取得するために最小限の作業を行う必要があります。物理学、AIなどはすべてのフレームを実行する必要はないため、それらを別のスレッドに入れることができます。今、私たちは持っています:

  1. レンダラースレッド-アニメーションの更新とポリゴンの描画
  2. ゲームスレッド-ロジックと定期的な物理学、AIなどの更新
  3. UIスレッド-Android UI相互作用のみ

UIスレッドをブロックしたくないので、ゲームロジック用にもう1つのスレッドを実行します。たぶんそれは必要ないでしょうか?レンダラースレッドでゲームロジックを実行する理由はありますか?

回答:


18

GoogleのChris Pruettがレプリカ島のブログでこの問題について語っています。eglSwapBuffers()はGLSurfaceViewスレッドのブロッキングコールであるため、別のスレッドにゲームロジックコードを含めると、スワップバッファーコールがブロッキングしている間に実行できます。これは、ゲームが複雑で、1秒あたり60フレームを達成したい場合に重要です。

Replica Islandのソースコードをダウンロードして、どのように実行されたかを確認できます。私のゲームにも似たようなものを実装しました(3つのスレッドについて)。


2

Androidは標準のJavaスレッドをサポートしています。パッケージjava.util.concurrentの標準スレッドとツールを使用して、アクションをバックグラウンドに配置できます。唯一の制限は、バックグラウンドプロセスからUIを直接更新できないことです。

バックグラウンドタスクからUIを更新する必要がある場合は、Android固有のクラスを使用する必要があります。このクラスまたはクラスAsyncTasksにはクラスandroid.os.Handlerを使用できます。

詳細については、次のリンクをご覧ください。

http://mindstick.com/Articles/7a9205de-bae7-48ba-81b5-2b2ec161d672/?Thread%20in%20Android

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.