私はまだAndroid用アプリケーションをOpenGLに移行する作業をしており、もう一度問題が発生しています。描画コマンドを送信するより理想的な方法はありますか?
私はすべての点で機能していますが、唯一の問題はアニメーションがちょっと邪魔に思えることです。
フレームレートを監視しており、描画スレッドが減速していないことを確認していますが、メインループが少し遅くなり、私が心配していた問題があると思われます。
新しいオブジェクト(例えば、敵)が作成されると、実際には2つのオブジェクトが作成されます。最初のものが作成されてメインスレッドにマッピングされ、そのコンストラクタでメッシュオブジェクトが作成され、グループに追加されてレンダラによって引き続き描画されます。 (例えばその座標など)
オブジェクトの属性が変更されるたびに、オブジェクトはそのメッシュの対応に必要なコマンドを中継(メッシュを変換するために、この例では。)
これがあることが示唆されましたスレッドセーフな通信が、私は疑問を持っています。私はまた、新しいオブジェクトが作成されたときに大量のフレームスキップが発生していることに気付きます。同じメッシュオブジェクトを同じGameオブジェクトに再利用することでこれを修正できますが、それだけですべてが修正されるとは思われません。
これをより効率的かつスレッドセーフにする方法を考えてもいいですか?
もう1つの可能な解決策:ゲームロジックがまったく更新が33ミリ秒を渡すそれまでは行われないように、私はそれが実際に設定したフルスピード(リアルタイム)に行く必要はありません。だから明らかに、私は描画するフレーム間に多くの時間を持っている必要がありますので、抽選は(ゲームのロジックが更新された後に)スレッドのコマンドでのみ呼び出されるように設定することはできますか?
どのような方法でメッシュの状態変化を「中継する」のですか?私はあなたが減速が起こっていると感じるところの印象を受けます。 – OldCurmudgeon
また、新しいプレーヤーが作成されているときにフレームスキップをさらに観察している場合、それらを作成するためにどのようなメカニズムを使用していますか?彼らは新しいスレッドですか?あなたは 'Executor'を使っていますか? – OldCurmudgeon
私は現在、wait()やNotify()などのリレーを実装していません。また、新しいオブジェクトを作成する方法は、オブジェクトのハッシュマップを実装し、.putを使用して各新しいオブジェクトに一意のキーを割り当てることです。いいえ、新しいスレッドではなく、非常に単純なオブジェクトです。敵オブジェクトには、実際にはいくつかの属性と、それらを更新するのに必要なメソッドだけが含まれています。作成するメッシュオブジェクトはすべて、私が実装するテクスチャマネージャクラスを通してテクスチャ化できるすべての四角形です。これは理想的ではないかもしれませんが、各フレームに使用されるテクスチャを単に切り替えることができます。 – cody