【问题标题】:JInput Multiple Controllers?JInput 多个控制器?
【发布时间】:2026-01-13 01:30:01
【问题描述】:
我对 jinput 和 java 有点陌生,我想知道,用 jinput 设置多个 xbox 360 控制器(尤其是 4 个)的最简单方法是什么?目前,我正在使用控制器在 jinput 上关闭 theuzo007 的 tutorial,并且正在进行基本的工作控制器设置。如果我可以设置什么控制器移动某些实体,那就太棒了。 (我正在使用我朋友的自制图书馆,你知道的。)
截图 -
http://imgur.com/a/1Ocu5
- 顶部是主要代码块,最后一个是标题(抱歉,将它们按错误的顺序排列,imgur 有时会这样做!)
如果有人可以帮助我,那就太好了,谢谢!
编辑:如果没有办法做到这一点,如果有人可以尝试向我推荐一个新库,那就太好了。
【问题讨论】:
标签:
java
controller
xbox
ps3
jinput
【解决方案1】:
有一种可能的方法
那个教程很不错此外,我认为您可以通过在 zip 中复制粘贴一些代码来完成 4 个控制器的工作,theuzo007 为您提供了更多功能。顺便说一句,你喜欢的那个页面说有那个教程的更好版本,你可以在其中下载他的代码的更好版本 -> theuzo007's JInput tutorial V2
下载代码后,您可以在 JoystickTest.java 中看到一个名为 searchForControllers() 的方法,您可以将其(使用相应的 private ArrayList<Controller> foundControllers; 作为字段)放入名为 ControllerChecker 的类中或一些更酷的名称中。将它们全部设为静态,您将得到如下结果:
public class ControllerChecker {
private static ArrayList<Controller> foundControllers = null;
/**
* Just used for checking all available controllers.
*/
private static void searchForControllers() {
Controller[] controllers = ControllerEnvironment.getDefaultEnvironment().getControllers();
for(int i = 0; i < controllers.length; i++){
Controller controller = controllers[i];
if (
controller.getType() == Controller.Type.STICK ||
controller.getType() == Controller.Type.GAMEPAD ||
controller.getType() == Controller.Type.WHEEL ||
controller.getType() == Controller.Type.FINGERSTICK
)
{
// Add new controller to the list of all controllers.
foundControllers.add(controller);
// Add new controller to the list on the window.
window.addControllerName(controller.getName() + " - " + controller.getType().toString() + " type");
}
}
}
/**
* Returns null if there is no controller available. Otherwise, it retrieves the last controller in the list by removing it.
*/
public static Controller getController() {
if(foundControllers == null) {
foundControllers = new ArrayList<Controller>();
searchForControllers();
}
return foundControllers.size() == 0 ? null : foundControllers.remove(foundControllers.size() - 1);
}
}
您将使用静态方法getController() 让玩家拥有不同的控制器,检查返回的控制器是否为空,这意味着没有可用的控制器。您也可以更改我的代码并在每次请求控制器时检查控制器,但您必须检查控制器是否已在使用中。
我希望这可以帮助您实现目标。这个解决方案只是检查所有可用的控制器,然后按找到它们的最后一个顺序返回(也许使用堆栈更有效)。但可能您会想要更多功能,例如能够通过按下按钮告诉程序选择特定控制器,也许在屏幕上显示“请连接您的控制器并按任意键/按钮”。如果您了解 theuzo007 的代码(JoystickTest.java 有很多有用的行!),这将很容易实现。
您还可以创建一些机制来检测未插入的控制器,并且只需再次插入它们,系统就会识别它。也许有一些控制器ID,我还没有找到它。
最后,还有更多代码here。