# Multiple Joysticks mit Jinput



## cweb (25. Sep 2019)

Ich bin Java-Anfänger und habe mir zum Einstieg das Spiel "Pong" in den letzten Wochen zusammengebastelt. 

Nun möchte ich das Spiel mit zwei Joysticks steuern. Hierzu habe ich Jinput installiert und bekomme inzwischen beide Joysticks zum laufen. Leider nur nicht gleichzeitig. Das heißt, ich kann entweder den linken Racket mit dem "blauen Joystick" steuern oder ich kann den rechten Racket mit dem "roten Joystick" steuern. Und zwar indem ich die Reihenfolge in der Main-Klasse wechsle.

Freue mich über jeden Tipp!!!

Viele Grüße
cweb

Hier mein Code für die Main-Klasse, GamePadReader und GamePadReader2




```
package ponggame2;

import java.awt.AWTException;
import java.util.Timer;

public class PongGame2 {

    Timer[] timers;

    public static void main(String[] args) throws AWTException {

        new Gui();
        new Var();
        new BallMovement();
        new Movement();
        new Gegner2Movement();
        new BallKollision();
        
        new GamePadReader2();
        new GamePadReader();
        
        
        
        
        
        
    }

}
```





```
package ponggame2;

import java.sql.JDBCType;
import java.sql.Types;
import net.java.games.input.Controller;
import net.java.games.input.ControllerEnvironment;
import net.java.games.input.Component;
import net.java.games.input.Event;
import net.java.games.input.EventQueue;

/**
 *
 * @author rodrigues
 */
public class GamePadReader {

    public GamePadReader() {

        while (true) {

            /* Get the available controllers */
            Controller[] controllers = ControllerEnvironment
                    .getDefaultEnvironment().getControllers();

            if (controllers.length == 0) {

                System.out.println("Found no controllers.");

                System.exit(0);

            }

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

                /* Remember to poll each one */
                controllers[i].poll();
               //System.out.println(controllers[i]);

               
                EventQueue queue = controllers[6].getEventQueue();
                
               
                Event event = new Event();
              
                    while(queue.getNextEvent(event)) {
                        if (event.getComponent().getIdentifier() == Component.Identifier.Axis.Y) {
                  
                        if (event.getValue() == 1) {
                            Var.moveup2 = true;
                            Var.movedown2 = false;
                            System.out.println("moveup");
                            
                        } else if (event.getValue() == -1) {
                            Var.movedown2 = true;
                            Var.moveup2 = false;
                            System.out.println("movedown");
                            
                        } else {
                            Var.moveup2 = false;
                            Var.movedown2 = false;
                            System.out.println("dont move");
                        } 
                          
                        
                    
                    System.out.println(event.getComponent().getIdentifier());
                    
                      StringBuffer buffer = new StringBuffer(controllers[i].getName());

                    buffer.append(" rot ");

                    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(5);

                    } catch (InterruptedException e) {

                        // TODO Auto-generated catch block
                        e.printStackTrace();

                    }

                }

            }
            }
        }
        }
```





```
package ponggame2;

import net.java.games.input.Controller;
import net.java.games.input.ControllerEnvironment;
import net.java.games.input.Component;
import net.java.games.input.Event;
import net.java.games.input.EventQueue;
/**
 *
 * @author cweb
 */
public class GamePadReader2 {
    
    public GamePadReader2() {
        while (true) {

            /* Get the available controllers */
            Controller[] controllers = ControllerEnvironment
                    .getDefaultEnvironment().getControllers();

            if (controllers.length == 0) {

                System.out.println("Found no controllers.");

                System.exit(0);

            }

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

                /* Remember to poll each one */
                controllers[i].poll();
                
                System.out.println(controllers[i].getControllers());

                EventQueue queue = controllers[8].getEventQueue();

                /* Create an event object for the underlying plugin to populate */
                Event event = new Event();

                /* For each object in the queue */
                while (queue.getNextEvent(event)) {
                    if (event.getComponent().getIdentifier() == Component.Identifier.Axis.Y) {
                        if (event.getValue() == 1) {
                            Var.moveup = true;
                            Var.movedown = false;
                            System.out.println("moveup");
                        } else if (event.getValue() == -1) {
                            Var.movedown = true;
                            Var.moveup = false;
                            System.out.println("movedown");
                        } else {
                            Var.moveup = false;
                            Var.movedown = false;
                            System.out.println("dont move");
                        }
                  
                    }
                    System.out.println(event.getComponent().getIdentifier());
                    
                      StringBuffer buffer = new StringBuffer(controllers[i].getName());

                    buffer.append(" blau ");

                    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(5);

                    } catch (InterruptedException e) {

                        // TODO Auto-generated catch block
                        e.printStackTrace();

                    }

                }

            }

        }
    }
```


----------



## mihe7 (25. Sep 2019)

cweb hat gesagt.:


> Freue mich über jeden Tipp!!!


Vergiss das Youtube-Tutorial und beschäftige Dich ein wenig mit den Grundlagen der Java- und GUI-Programmierung, dann wird das auch was. Dein Code bleibt in der while-Schleife hängen. Ich kenne jetzt die Lib nicht, würde aber mal vermuten, dass Du einfach einen ControllerListener beim ControllerEnvironment registrieren musst.


----------

