-->

Java using Xbox controller [closed]

2020-07-10 05:54发布

问题:

What library would you recommend to hook up my Xbox 360 controller to Java, and be able to read key inputs into keyPressed Event as a KeyEvent.

So I would like something like this

private class KeyInputHandler extends KeyAdapter {
    public void keyPressed(KeyEvent e) {
    }
}

And I want all the controller presses to go into keyPressed.

I would appreciate it even further if you can provide good libraries for PS3 controllers too.

回答1:

The wired XBox 360 controller will present as a joystick in Windows, so a library like JXInput will allow you to accept inputs from it.

Simple example

JXInput site



回答2:

There is an open-source project called Jamepad. Download the project and add it to the dependencies of your project. It works out-of-the-box with my wireless Xbox 360 controller.

I made a game with the following input types:

public enum InputAction {
    MOVE_UP, MOVE_DOWN, MOVE_LEFT, MOVE_RIGHT
}

The following class will then handle your controller and convert the input to your own internal representation.

public class GamepadInput {
    private final ControllerManager controllers;

    public GamepadInput() {
        controllers = new ControllerManager();
        controllers.initSDLGamepad();
    }

    Set<InputAction> actions() {
        ControllerState currState = controllers.getState(0);
        if (!currState.isConnected) {
            return Collections.emptySet();
        }

        Set<InputAction> actions = new HashSet<>();
        if (currState.dpadLeft) {
            actions.add(InputAction.MOVE_LEFT);
        }
        if (currState.dpadRight) {
            actions.add(InputAction.MOVE_RIGHT);
        }
        if (currState.dpadUp) {
            actions.add(InputAction.MOVE_UP);
        }
        if (currState.dpadDown) {
            actions.add(InputAction.MOVE_DOWN);
        }
        return actions;
    }
}