2017-08-15 13 views
0

In meiner aktuellen LWJGL-Anwendung verwende ich den GLFW-Fenstereingabe-Handler, den ich mit der Klasse Keyboard.java, die GLFWKeyCallback erweitert, eingerichtet habe. Ich habe meine Tastatureingabeklasse korrekt eingerichtet, aber wenn ich auf einen Schlüssel klicke, wenn ich nicht schnell genug (sehr schnell) klicke, dann registriert er sich als mehrere Klicks. Ich habe eine Dokumentation im folgenden dargestellt:GLFW Tastatureingangsregister als mehrere Klicks

Keyboard Klasse

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; 

    } 

} 

Implementierung

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

Das oben beschriebene Verfahren in der Hauptspielschleife implementiert und wird einmal im Rahmen genannt.

Ergebnis

Initialisiert LWJGL Version: 3.1.2 bauen 29

Raum

Raum

Raum

Raum

Die oben: „S Tempo "sollte jedes Mal ausgegeben werden, wenn ich auf Space klicke, aber wenn ich relativ schnell darauf klicke, dann bekomme ich das obige Ergebnis von vielen" Leerzeichen ".

Fazit: Ist es möglich, dass ein Klick Speicherplatz nur einmal registriert wird, egal wie lange Sie es halten. Danke

Antwort

1

In Ihrer handleInput() Funktion testen Sie, ob Keyboard.keys[GLFW_KEY_SPACE] wahr ist, und wenn dies der Fall ist, führen Sie die Anweisung aus. Das Problem ist, dass dieser Test nur dann falsch wird, wenn Sie aufhören, den Raum zu treffen, was Sekunden dauern könnte.

Mein Vorschlag: Sobald Sie für Keyboard.keys[GLFW_KEY_SPACE] getestet haben, machen Sie es falsch.

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

Danke für die Antwort, aber ich hatte es bereits geschafft, dies zu beheben. Dies ist jedoch ein viel einfacherer Ansatz dazu. Vielen Dank. –