JInput несколько контроллеров?
Я немного новичок в jinput и java в целом, и мне было интересно, как проще всего настроить несколько контроллеров xbox 360 (особенно 4) с помощью jinput? В настоящее время я перехожу к учебнику theuzo007 по jinput с контроллерами и продолжаю базовую настройку рабочего контроллера. было бы здорово, если бы я мог установить, какой контроллер перемещает определенные объекты. (Я использую домашнюю библиотеку моего друга, просто чтобы вы знали.)
Скриншот -
- top - это основной блок кода, последний - заголовок (извините за неправильное расположение, иногда это делает imgur!)
если бы кто-нибудь мог мне помочь, это было бы здорово, спасибо!
редактировать: если нет никакого способа сделать это, если бы кто-то мог попытаться рекомендовать мне новую библиотеку, это было бы здорово.
1 ответ
Есть возможный путь
Этот урок довольно хорош. Кроме того, я думаю, что вы можете выполнить 4 действия с контроллерами, скопировав некоторый код в zip-файле, который предоставляет вам theuzo007 и немного больше. Кстати, на той странице, которая вам понравилась, написано, что есть лучшая версия этого учебника, где вы можете скачать и лучшую версию его кода -> учебник JInput от theuzo007 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 много полезных строк!).
Также вы можете создать какой-то механизм для обнаружения отключенных контроллеров и просто подключив их снова, система распознает их. Может быть, есть какой-то идентификатор контроллера, я еще не нашел его.
Наконец, здесь есть больше кода.