Recevoir une entrée de joystick dans Java LW JFL

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

Recevoir une entrée de joystick dans Java LW JFL
Lire l'entrée standard en Java
Réception d'entrée très simple en Java
Entrée de la console en Java (comprendre le mécanisme)
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Comment entrer / sortir des fichiers mainframe IBM en Java?
[Java] Recevoir une entrée standard tout en effectuant des vérifications numériques, etc.
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Paramètres du joystick dans OpenDS
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
entrée de boucle du scanner java
L'histoire de l'utilisation de Java Input Wait (Scanner) avec VSCode