2017-08-15 4 views
0

私の現在のLWJGLアプリケーションでは、GLFWKeyCallbackを拡張するKeyboard.javaという名前のハンドルを扱うクラスを設定したGLFWウィンドウ入力ハンドラを使用しています。私はキーボード入力クラスを正しく設定しましたが、十分速く(非常に速く)クリックしないとキーをクリックすると、複数のクリックとして登録されます。複数のクリックとしてGLFWキーボード入力レジスタ

Keyboardクラス

public class Keyboard extends GLFWKeyCallback { 

    //Variables 
    public static boolean keys[] = new boolean[65536]; 

    @Override 
    public void invoke(long window, int key, int scancode, int action, int mods) { 

     keys[key] = action == GLFW_PRESS; 

    } 

} 

実装

public static void handleInput() { 
    if (Keyboard.keys[GLFW_KEY_SPACE]) { 
     System.out.println("Space"); 
     glfwPollEvents(); 
    } 
} 

上記の方法はゲームのメインループで実装され、フレームに一度と呼ばれる:私は以下のいくつかのドキュメントを提示しています。

結果

初期化LWJGLのバージョン:3.1.2ビルド29

スペース

スペース

スペース

スペース

上記:「Sペース "は、私がスペースをクリックするたびに出力する必要がありますが、私はそれを比較的速くクリックすると、多くの"スペース "の上記の結果が得られます。

結論:スペースをクリックしても、どれだけ長く保持していても、スペースを1回だけ登録することは可能ですか?ありがとう

答えて

1

handleInput()関数では、Keyboard.keys[GLFW_KEY_SPACE]が真であるかどうかをテストしています。そうであれば、そのステートメントを実行します。問題は、このテストはスペースを打つのをやめたときにのみ偽になることです。

私の提案:一度あなたがKeyboard.keys[GLFW_KEY_SPACE]をテストしたら、それを偽にしてください。

public static void handleInput() { 
    if (Keyboard.keys[GLFW_KEY_SPACE]) { 
     Keyboard.keys[GLFW_KEY_SPACE] = false; 
     System.out.println("Space"); 
     glfwPollEvents(); 
    } 
} 
+0

回答ありがとうございましたが、私はすでにこれを修正することができました。しかし、これははるかに簡単なアプローチです。ありがとうございました。 –

関連する問題