Ich versuche, eine Art von First-Person-Ansicht 3D-Spiel in JavaFX zu schreiben und die Bewegung funktioniert bisher ziemlich gut.JavaFX KeyEvents sind verzögert, wenn robot.moveMouse() verwendet
Ich verwende JavaFX integrierte Form und PerspectiveCamera-Klassen, um das Bild in die Szene zu rendern.
Aber es gibt eine Eingabeverzögerung von ungefähr 1-2 Sekunden für alle Schlüsselereignisse.
Die lags nur erscheinen:
, sobald das Programm zu Vollbild umgeschaltet wird (auch eingeschaltet, wenn wieder noch da sind sie zu Fenstermodus, aber nicht, wenn das Programm wurde gerade begonnen)
und die Kamera wird mit der Maus gedreht mit kurz vor dem Drücken/Loslassen einer Taste
z.B .: Ich drücke W, um vorwärts zu gehen und gleichzeitig die Maus zu bewegen. Wenn ich W jetzt loslasse, würde der Spieler noch 1-2 Sekunden vorwärts gehen. Ohne die Maus zu bewegen passiert es nicht.
Dies ist, wie der Eingang verfolgt wird:
scene.setOnKeyPressed(e -> keyPressed(e));
scene.setOnKeyReleased(e -> keyReleased(e));
und (für keyReleased (e) es ist das gleiche nur mit "false")
private void keyPressed(KeyEvent e) {
if (e.getCode().toString() == "W") w = true;
if (e.getCode().toString() == "A") a = true;
if (e.getCode().toString() == "S") s = true;
if (e.getCode().toString() == "D") d = true;
}
Für die Kamerabewegung i mit dieser Funktion :
private void mouseMovement(){
if(primaryStage.isFocused()){
mxdelta = MouseInfo.getPointerInfo().getLocation().getX() - centerx;
mydelta = MouseInfo.getPointerInfo().getLocation().getY() - centery;
// Rotate Camera
cry += mxdelta * sens; // cry = camera rotation around y-axis
crx -= mydelta * sens; // crx = camera rotation around x-axis
// move curser back to the center of the screen
robot.mouseMove(centerx, centery);
}
}
Wenn ich "robot.mouseMove (centerx, centery)," entfernen alles funktioniert gut. Auch wenn ich die Kamerabewegung über die Pfeiltasten steuere, gibt es auch keine Verzögerungen.
Die ganze Spielschleife ist in JavafX AnimationTimer verpackt, die eine stabile Framerate gibt.
Eine weitere kleine Beobachtung: Da das Programm gerade gestartet ist, gibt es viele kleine Stotter. Sobald ich auf Vollbild umschalte, läuft das Programm butterweich (trotz der Eingabefehler natürlich. Aber die Maus hat überhaupt keine Eingabefolge).
Ich kann den vollständigen Code bei Bedarf hochladen oder ein Video hochladen, wenn das Problem nicht klar genug ist.