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