有一种可能的方法
该教程非常好。此外,我认为您可以通过在 zip 中复制粘贴一些代码来完成 4 个控制器的工作,theuzo007 为您提供了更多功能。顺便说一句,您喜欢的那个页面说该教程有更好的版本,您可以在其中下载他的代码的更好版本 -> theuzo007 的 JInput 教程 V2
下载代码后,您可以在 JoystickTest.java 中看到一个名为 searchForControllers() 的方法,您可以将(使用相应private ArrayList<Controller> foundControllers;
的 as 字段)放入一个名为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,我还没有找到它。
最后,这里还有更多代码。