LWJGLゲームで私が3つのスレッド持って作ってるんだ - グラフィックスのための1つ、処理/物理学と世界へのアクセスを提供し、マルチ接続に対処するための1対1に。 問題は、物理スレッドでKeyboard.isKeyDown()を呼び出すと、何かが起こる前に半分程度待たなければならないことです。これは、スレッドがゆっくり実行されているためではありません。ループの瞬間にスレッドが唯一のものであり、println呼び出しによって更新中であることが示されます。 これは、OpenGLコンテキストがグラフィックススレッドに存在し、物理スレッドからキーボード呼び出しを呼び出すという事実と関係があるのでしょうか?私がグラフィックススレッドのチェックを行うとうまくいきますが、そこに入力を入れて別のスレッドに送ることは、別のスレッドを持つことに多少なりとも反対します。マルチスレッドLWJGLキーボードディレイ
私のキーボードのチェックは現在、次のようになります。別のスレッドからメソッドを呼び出すときに遅延がある理由
boolean escPressed = false;
private void process(){
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){
if(!escPressed){
escPressed = true;
GameStateManager.pauseUnpause();
}
}
else{
escPressed = false;
}
}
マイスレッドのセットアップは、単にこの
public class Client {
public static GraphicsThread graphics;
public static PhysicsThread physics;
public static ConnectionThread server;
public static void main(String[] args) {
GameStateManager.setState(GameStateManager.EnumState.MENU);
graphics = new GraphicsThread();
physics = new PhysicsThread();
server = new ConnectionThread();
physics.start();
graphics.start();
server.start();
}
}
あるので、誰も私を伝えることができます?
更新 は、私は簡単なテストを行なったし、それキーボードへの呼び出しは、ちょうど完了するまでに非常に長い時間がかかるように見えます。そのテストを実行
while(true){
start = System.currentTimeMillis();
Keyboard.isKeyDown(Keyboard.KEY_ESCAPE);
end = System.currentTimeMillis();
System.out.println(end-start);
}
は途方もなく高い1100ms、という高い結果を示しました。グラフィックススレッドで実行すると、ミリ秒未満で完了し、0を出力します。ここで何が起こっているのかはわかりません。
どこでキーボードイベントを待つ/ポーリングするのですか?または、試合中に特定の押されたキーだけをチェックしていますか? – n247s
現在、すべてのゲームのダニで押されたキーがチェックされています – DestinySpork