2016-11-03 2 views
0

Je construis un simulateur de robot pour simuler la façon dont le robot se déplace et réagit aux frottements et autres événements extérieurs. Je l'ai en utilisant les touches fléchées pour la saisie, mais j'essaie de le faire fonctionner avec un joystick. J'utilise slick2D par recommandation. Je n'ai jamais utilisé slick2D et je suis très confus sur la façon de faire fonctionner mon programme. Quelles classes de slick dois-je utiliser?Commande de joystick Java

Répondre

0

Selon Slick2D's forums, JInput est la méthode préférée pour travailler avec un joystick.

Conformément à java-gaming.org, JInput nécessite que les bibliothèques natives fonctionnent (.dll, .so ou .dylib, selon votre plate-forme).

Voici l'exemple copié de Java-jeu:

/* Gets a list of the controllers JInput knows about and can interact with */ 
    Controller[] ca = ControllerEnvironment.getDefaultEnvironment().getControllers(); 

    for(int i =0;i<ca.length;i++){ 

     /* Get the name of the controller */ 
     System.out.println(ca[i].getName()); 

     /* Gets the type of the controller, e.g. GAMEPAD, MOUSE, KEYBOARD */ 
     System.out.println("Type: "+ca[i].getType().toString()); 

     /* Get this controllers components (buttons and axis) */ 
     Component[] components = ca[i].getComponents(); 
     System.out.println("Component Count: "+components.length); 
     for(int j=0;j<components.length;j++){ 

      /* Get the components name */ 
      System.out.println("Component "+j+": "+components[j].getName()); 

      /* Gets its identifier, E.g. BUTTON.PINKIE, AXIS.POV and KEY.Z */ 

      System.out.println(" Identifier: "+ components[j].getIdentifier().getName()); 

      /* Display if component is relative, absolute, analog, digital */ 
      System.out.print(" ComponentType: "); 
      if (components[j].isRelative()) { 
       System.out.print("Relative"); 
      } else { 
       System.out.print("Absolute"); 
      } 
      if (components[j].isAnalog()) { 
       System.out.print(" Analog"); 
      } else { 
       System.out.print(" Digital"); 
      } 
     } 
    } 

valeurs nécessite Obtenir l'interrogation de l'appareil ou en utilisant Queues événement. Attention, ce bloc suivant est écrit dans une boucle infinie, qui peut bloquer l'exécution d'autres codes, un bon candidat pour un thread dédié.

while(true) { 
    Controller[] controllers = ControllerEnvironment.getDefaultEnvironment().getControllers(); 
    if(controllers.length==0) { 
     System.out.println("Found no controllers."); 
     break; 
    } 

    for(int i=0;i<controllers.length;i++) { 
     controllers[i].poll(); 

    EventQueue queue = controllers[i].getEventQueue(); 
    Event event = new Event(); 

    while(queue.getNextEvent(event)) { 
      StringBuffer buffer = new StringBuffer(controllers[i].getName()); 
      buffer.append(" at "); 
      buffer.append(event.getNanos()).append(", "); 
      Component comp = event.getComponent(); 
      buffer.append(comp.getName()).append(" changed to "); 
      float value = event.getValue(); 
      if(comp.isAnalog()) { 
       buffer.append(value); 
      } else { 
       if(value==1.0f) { 
       buffer.append("On"); 
       } else { 
       buffer.append("Off"); 
       } 
      } 
      System.out.println(buffer.toString()); 
     } 
    } 

    try { 
     Thread.sleep(20); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    }