2011-09-14 19 views
2

私はゲームループを作成しています。私がプロセスに倒れているとわかったら、フレームをスキップするために(私はレンダラーの中から手動で)onDrawFrameを呼び出す必要があります。 OpenGL-es手でonDrawFrameを呼び出す

は現在、私はこれで

setRenderer(glSurfaceRenderer); 

を呼び出すGLSurfaceViewクラスは、私はonDrawFrameはすべてのダニと呼ばれていることを理解し設定しています。

私はゲームループの内側からそれを呼び出すことができますが、ゲームループのセカンドランで私は

setRenderer has already been called for this instance 

をというメッセージでクラッシュするように私は、メソッドの内部で上記の呼び出しを入れてみました方法はあります手動ですべてのフレームをレンダリングを呼び出すために

はちょうど適切

onDrawFrame 

方法の作業を呼び出します。または、OpenGLを使用する際にレンダラーを制御するのは良い習慣ではありません

答えて

4

setRenderer()を呼び出す方法や、ゲームループ内で手作業でonDrawFrame()を呼び出す方法が何も問題を解決する方法がわかりません。レンダリングコールをリファクタリングして、描画にかかる時間、つまり時間ベースのアニメーションを考慮に入れる必要があります。いずれの場合でもeglMakeCurrent()を呼び出さずに手動でonDrawFrame()を呼び出すと、レンダラースレッドとゲームループのスレッド描画の両方があるため、描画呼び出しが機能しません。

編集:GLSurfaceViewを使用しているので、RENDERMODE_CONTINUOUSLYが遅すぎると感じる場合は、ゲームループからrequestRender()を呼び出してレンダリングをトリガーすることができます。

+0

私はすでに時間ベースのゲームループを作っています(残念ですが、それはありません)必要なのは、レンダラーがその時に描いたものであることを確認する方法です。 – Jack

+0

レンダラの速度が遅い場合、ハードウェアを追加することなくできることはありません。 – Jasoneer

+0

それは私が意味するものではありません:/私が使用しているチュートリアルは[穀物に対して](obivam.net/index.php/the-android-game-loop)の問題です。チュートリアルではキャンバスを使用していますGL – Jack

関連する問題