Empfangen Sie Joystick-Eingaben in Java LW JFL

Die Methode zum Empfangen von Joystick-Eingaben in Java kann auch mit einer Bibliothek namens JInput durchgeführt werden. Sie müssen die native Bibliothek (DLL) irgendwo in Ihren Pfad einfügen. Ich mochte Mac / Linux nicht, also mochte ich es nicht, also habe ich versucht, eine Bibliothek namens LWJGL zu verwenden.

Laden Sie zunächst LWJGL3 von https://www.lwjgl.org/ herunter. Die folgenden 4 Gläser werden für Fenster benötigt.

Ich denke, Mac / Linux sollte Natives-Mac oder Natives-Linux verwenden Ich habe mit diesem Code experimentiert.

JoyStick.java


import java.nio.ByteBuffer;
import java.nio.FloatBuffer;

import org.lwjgl.glfw.GLFW;

public class JoyStick {

	public static void main(String[] args) {
		//Initialisieren Sie das GLFW. Wenn Sie dies nicht tun, funktionieren die meisten GLFW-Funktionen nicht.
		if(!GLFW.glfwInit())
			throw new IllegalStateException("Unable to initialize GLFW");

		GLFW.glfwPollEvents();
		int stick;
		for(stick = 0; stick <= GLFW.GLFW_JOYSTICK_LAST; stick++) {
			if(!GLFW.glfwJoystickPresent(stick)) continue;
			System.out.println("JoyStick(" + stick + ")Name:" +
					GLFW.glfwGetJoystickName(stick) + " " +
					GLFW.glfwGetGamepadName(stick));
			break;
		}
		if(stick > GLFW.GLFW_JOYSTICK_LAST) return;

		for(int i = 0; i < 1000; i++) {
			int count1 = 0;
			FloatBuffer floatBuffer = GLFW.glfwGetJoystickAxes(stick);
			System.out.print("Axes:");
			while (floatBuffer.hasRemaining()) {
				float axes = floatBuffer.get();
				System.out.print(count1 + "," + axes + " ");
				count1++;
			}

			int count2 = 0;
			System.out.print("Button:");
			ByteBuffer byteBuffer = GLFW.glfwGetJoystickButtons(stick);
			while (byteBuffer.hasRemaining()) {
				byte button = byteBuffer.get();
				System.out.print(count2 + "," + button + " ");
				count2++;
			}
			System.out.println();

			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
		}
	}

}

Das Ausführungsergebnis sollte so aussehen.

JoyStick(0)Name:PC Game Controller        SVEN X-PAD
Axes:0,1.5259022E-5 1,1.5259022E-5 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,1.5259022E-5 1,1.5259022E-5 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-0.3515526 1,1.5259022E-5 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-1.0 1,-0.20311284 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-1.0 1,-0.17967498 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-1.0 1,1.5259022E-5 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-1.0 1,1.5259022E-5 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,-1.0 1,1.0 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 
Axes:0,1.5259022E-5 1,1.0 2,1.5259022E-5 3,1.5259022E-5 4,1.5259022E-5 Button:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 14,0 15,0 

Sie können vergeblich bis zu 16 Joysticks verwenden. Hier wird nur der erste ins Visier genommen. Der erste Float-Puffer, der mit glfwGetJoystickAxes () abgerufen werden kann, ist die X-Koordinate des linken Sticks und der zweite die Y-Koordinate. Achsen haben 5 Puffer, aber den rechten Stick und eine andere Achse. was ist das? ?? ?? Ob analog oder digital, die Mitte des Sticks ist nicht 0,0. Es scheint, dass 0,0 nur erhalten werden kann, wenn der Absolutwert von 0,01 oder weniger abgeschnitten ist. Der Byte-Puffer, der mit glfwGetJoystickButtons () abgerufen werden kann, scheint in der Reihenfolge der Schaltflächennummern zu liegen. Es gibt 16 Schaltflächen und 16 Puffer, aber nur die ersten werden verwendet.

Der Punkt ist glfwInit (). Ich habe das nicht gemacht und es hat nicht funktioniert. Was ist los mit Init? .. ..

Nach der Methode von LWJGL müssen Sie anscheinend so etwas wie "statische org.lwjgl.glfw.GLFW importieren. *;", Aber es ist nicht Java-ähnlich, also importiere ich es und verwende es.

Danach können Sie kochen oder backen.

Recommended Posts

Empfangen Sie Joystick-Eingaben in Java LW JFL
Lesen Sie die Standardeingabe in Java
Sehr einfacher Eingangsempfang in Java
Konsoleneingabe in Java (Verständnis des Mechanismus)
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
[Java] Empfangen Sie Standardeingaben, während Sie numerische Überprüfungen usw. durchführen.
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Joystick-Einstellungen in OpenDS
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Java Scanner Loop Eingang
Die Geschichte der Verwendung von Java Input Waiting (Scanner) mit VSCode