La méthode de réception de l'entrée du joystick en Java peut également être effectuée avec une bibliothèque appelée JInput, Vous devez mettre la bibliothèque native (DLL) quelque part dans votre chemin, Je n'aimais pas Mac / Linux, donc je ne l'ai pas aimé, alors j'ai essayé d'utiliser une bibliothèque appelée LWJGL.
Tout d'abord, téléchargez LWJGL3 à partir de https://www.lwjgl.org/. Les 4 bocaux suivants sont requis pour Windows.
Je pense que Mac / Linux devrait utiliser natives-mac ou natives-linux J'ai expérimenté ce code.
JoyStick.java
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import org.lwjgl.glfw.GLFW;
public class JoyStick {
public static void main(String[] args) {
//Initialisez le GLFW. Si vous ne le faites pas, la plupart des fonctions GLFW ne fonctionneront pas.
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);
}
}
}
}
Le résultat de l'exécution devrait ressembler à ceci.
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
Vous pouvez utiliser jusqu'à 16 joysticks en vain. Seul le premier est visé ici. Le premier tampon flottant qui peut être obtenu avec glfwGetJoystickAxes () est la coordonnée X du joystick gauche et la seconde est la coordonnée Y. Axes a 5 tampons, mais le stick droit et un autre axe. Qu'est-ce que c'est ça? ?? ?? Qu'il soit analogique ou numérique, le centre du stick n'est pas 0,0. Il semble que 0,0 ne puisse être obtenu que si la valeur absolue de 0,01 ou moins est tronquée. Le tampon d'octets qui peut être obtenu avec glfwGetJoystickButtons () semble être dans l'ordre des numéros de bouton. Il y a 16 boutons et 16 tampons, mais seuls les premiers seront utilisés.
Le point est glfwInit (). Je n'ai pas fait ça et ça n'a pas marché. Quel est le problème avec Init? .. ..
Selon la méthode de LWJGL, il semble que vous deviez faire quelque chose comme ʻimport static org.lwjgl.glfw.GLFW. *; `, Mais ce n'est pas Java, donc je l'importe et l'utilise.
Après cela, n'hésitez pas à faire bouillir ou cuire au four.
Recommended Posts