2

ゲームループを作成していますが、プロセスで遅れていることがわかった場合に「フレームをスキップ」するために、onDrawFrameを(レンダラー内から手動で)呼び出すことができる必要があります。

現在、私はGLSurfaceViewクラスを持っています。

setRenderer(glSurfaceRenderer);

この設定により、onDrawFrameがすべてのティックと呼ばれることを理解しています。

上記の呼び出しをメソッド内に入れて、ゲームループ内から呼び出すことができるようにしましたが、ゲームループの2回目の実行時に、次のメッセージが表示されてクラッシュします。

setRenderer has already been called for this instance

フレームごとに手動でレンダラーを呼び出す方法はありますか?

ただ電話します

onDrawFrame

メソッドは正しく機能します。または、openGLを使用するときに、このような方法でレンダラーを制御することはお勧めできません。

4

1 に答える 1

4

ゲームループでの呼び出しsetRenderer()または手動呼び出しがどのように解決するかわかりません。onDrawFrame()描画にかかる時間、つまり時間ベースのアニメーションを考慮して、レンダリング呼び出しをリファクタリングする必要があります。onDrawFrame()いずれにせよ、レンダラーとゲーム ループ スレッドの描画の両方があるため、描画呼び出しの前に呼び出しを行わずに手動で呼び出すことeglMakeCurrent()はできません。

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

于 2011-09-14T20:06:41.490 に答える