En esta entrada voy a comentar como realicé la conexión del mando Logitech Dual Action, para poder usarlo en simulaciones con PlayerStage.
La API que utilicé fue la Light Weight Java Game Library, que descargué y añadí en eclipse como biblioteca de usuario mediante Build Path (vía de acceso de construcción)
Para hacer uso de la biblioteca es necesario decirle a la JVM donde se encuentran los binarios (.dll en Windows o .so en linux). Están en el directorio native del paquete lwjgl que descargamos en el paso anterior. Es decir, que en eclipse nos vamos a "Ejecutar...", y en los argumentos de la VM ponemos (en mi caso):
-Djava.library.path=/home/diego/JavaLibraries/lwjgl-1.0beta4/native/linux
Dependiendo de la instalación ponermos el directorio correspondiente. En MS Windows podría ser:
-Djava.library.path=C:\JavaLibraries\lwjgl-1.0beta4\native\windows
Y el código de mi GamePad.java sería:
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Controller;
import org.lwjgl.input.Controllers;
public class GamePad {
public static final int START = 4;
public static final int END = 6;
private Controller controller = null;
private int buttonCount;
private int axisCount;
private int SO = -1; /* 0 GNU/Linux || 1 MS Windows */
public GamePad() {
try {
Controllers.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
int numberOfControllers = Controllers.getControllerCount();
if (numberOfControllers==0)
{
System.out.println("No se han encontrado controladores");
}
for(int i=0;i<numberofcontrollers;i++)
{
controller = Controllers.getController(i);
System.out.println(controller.getName());
}
buttonCount = controller.getButtonCount();
axisCount = controller.getAxisCount();
System.out.println("El controlador tiene " +
buttonCount + " botones y " +
axisCount + " ejes");
//Configuración de mando para sistemas MS y Linux
System.out.println("El sistema operativo es " + System.getProperty("os.name"));
if (System.getProperty("os.name").equalsIgnoreCase("Linux"))
this.SO = 0;
else
this.SO = 1;
}
public float[] getRightAxisValues(){
float[] values = new float[2];
Controllers.poll();
if (this.SO == 1){ //MS Windows
//Valor vertical (aceleracion)
values[0] = controller.getAxisValue(0)*(-1.0f);
//Valor horizontal (direccion)
values[1] = controller.getAxisValue(1)*(-1.0f);
}
else if (this.SO == 0){ //Linux
//Valor vertical (aceleracion)
values[0] = controller.getAxisValue(3)*(-1.0f);
//Valor horizontal (direccion)
values[1] = controller.getAxisValue(2)*(-1.0f);
//System.out.println(values[0] +" "+ values[1]);
}
else
System.exit(-1);
return values;
}
public boolean getButton(int n){
try{
Controllers.poll();
return controller.isButtonPressed(n);
}catch(Exception e){
return false;
}
}
}
En la caso de ejecución en GNU/Linux tuve un problema con un mensaje:
/dev/input/event0 cannot open device event0
La solución fue alterar los permisos de los dispositivos que eran 660 para el usuario root. Haciendo sudo chmod 666 /dev/input/event* se soluciona el problema.
Espero le sea útil a alguien.
La API que utilicé fue la Light Weight Java Game Library, que descargué y añadí en eclipse como biblioteca de usuario mediante Build Path (vía de acceso de construcción)
Para hacer uso de la biblioteca es necesario decirle a la JVM donde se encuentran los binarios (.dll en Windows o .so en linux). Están en el directorio native del paquete lwjgl que descargamos en el paso anterior. Es decir, que en eclipse nos vamos a "Ejecutar...", y en los argumentos de la VM ponemos (en mi caso):
-Djava.library.path=/home/diego/JavaLibraries/lwjgl-1.0beta4/native/linux
Dependiendo de la instalación ponermos el directorio correspondiente. En MS Windows podría ser:
-Djava.library.path=C:\JavaLibraries\lwjgl-1.0beta4\native\windows
Y el código de mi GamePad.java sería:
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Controller;
import org.lwjgl.input.Controllers;
public class GamePad {
public static final int START = 4;
public static final int END = 6;
private Controller controller = null;
private int buttonCount;
private int axisCount;
private int SO = -1; /* 0 GNU/Linux || 1 MS Windows */
public GamePad() {
try {
Controllers.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
int numberOfControllers = Controllers.getControllerCount();
if (numberOfControllers==0)
{
System.out.println("No se han encontrado controladores");
}
for(int i=0;i<numberofcontrollers;i++)
{
controller = Controllers.getController(i);
System.out.println(controller.getName());
}
buttonCount = controller.getButtonCount();
axisCount = controller.getAxisCount();
System.out.println("El controlador tiene " +
buttonCount + " botones y " +
axisCount + " ejes");
//Configuración de mando para sistemas MS y Linux
System.out.println("El sistema operativo es " + System.getProperty("os.name"));
if (System.getProperty("os.name").equalsIgnoreCase("Linux"))
this.SO = 0;
else
this.SO = 1;
}
public float[] getRightAxisValues(){
float[] values = new float[2];
Controllers.poll();
if (this.SO == 1){ //MS Windows
//Valor vertical (aceleracion)
values[0] = controller.getAxisValue(0)*(-1.0f);
//Valor horizontal (direccion)
values[1] = controller.getAxisValue(1)*(-1.0f);
}
else if (this.SO == 0){ //Linux
//Valor vertical (aceleracion)
values[0] = controller.getAxisValue(3)*(-1.0f);
//Valor horizontal (direccion)
values[1] = controller.getAxisValue(2)*(-1.0f);
//System.out.println(values[0] +" "+ values[1]);
}
else
System.exit(-1);
return values;
}
public boolean getButton(int n){
try{
Controllers.poll();
return controller.isButtonPressed(n);
}catch(Exception e){
return false;
}
}
}
En la caso de ejecución en GNU/Linux tuve un problema con un mensaje:
/dev/input/event0 cannot open device event0
La solución fue alterar los permisos de los dispositivos que eran 660 para el usuario root. Haciendo sudo chmod 666 /dev/input/event* se soluciona el problema.
Espero le sea útil a alguien.
No hay comentarios:
Publicar un comentario