Виртуальный геймпад Java

Проблема Я разрабатываю собственный аппаратный контроллер и хочу сопоставить его ввод с виртуальным контроллером XInput после его обработки на Java. По сути, для всех намерений и целей я хочу управлять контроллером XInput непосредственно из java.

Решения, о которых я подумал

  • Написание драйвера для устройства кажется настоящей головной болью, которую я бы с радостью избежал. Я никогда раньше не писал драйверы устройств и понятия не имею, как зарегистрировать контроллер XInput. Похоже, на это уйдет очень много времени, времени, которое я не имею и не хочу тратить.
  • Использование PPJoy и этой библиотеки. Я бы хотел избежать этого, поскольку PPJoy очень устарел (прошло более 10 лет с момента последнего обновления, которое я смог найти) и для преобразования DirectInput в XInput потребуется дополнительный уровень. Библиотека также отказывается компилироваться для меня.
  • Разработайте оболочку для VJoy. Однако для этого потребуется переназначение DirectInput на XInput. Я не знаком с оберткой C / C ++, но пока это кажется лучшей альтернативой.

Кто-нибудь знает, как решить эту проблему? Я подумал о том, чтобы пропустить XInput и сделать это с помощью клавиатуры / мыши с помощью робота (AWT), но игры отказываются принимать программный ввод, скорее всего, они только читают данные оборудования. Эмуляция клавиатуры / мыши была бы хорошей, но не оптимальной, поскольку это было бы довольно неудобно, однако я не могу найти способ сделать это так, как это распознают игры. Любая помощь приветствуется!


person Philip Borgström    schedule 01.09.2015    source источник


Ответы (1)


Напишите обертку, вам не нужно ничего знать, я повторяю любой код C ++, если вы действительно этого не хотите. Просто используйте swig. Есть множество примеров, начните с чего-нибудь базового. (Обратите внимание, я не собираюсь включать пример, потому что там уже достаточно материала). Если у вас возникнут проблемы, оставьте комментарий, и я вам помогу.

РЕДАКТИРОВАТЬ Хорошо, я поделюсь с вами быстрым примером, допустим, у вас есть файл example.h, создайте файл example.i в том же месте с помощью:

%module example

%{
#include "example.h"
%}

%include "example.h"

Убедитесь, что на вашем пути есть глоток, затем выполните:

%swig -java example.i

Затем вам нужно создать собственную библиотеку Java, например, как это делается здесь (обратите внимание, что вам не нужно делать все, что связано с javah), но в основном:

% g++ -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 
  -shared -o example.dll example.c example.cpp

Это дает вам вашу dll, которую вам нужно будет вставить на свой путь с любыми другими зависимыми библиотеками при запуске вашей Java-программы. Обратите внимание, что если вы компилируете 32-битную библиотеку, вам нужно использовать 32-битную jvm.

person Derrops    schedule 01.09.2015
comment
Спасибо :) Попробую попозже, кажется, я что-то нехорошо съела, поэтому сейчас лежу в постели и не могу попробовать. Обертка вокруг VJoy кажется лучшим выбором. Дело не в том, что я не умею читать / писать на C ++, я бы с удовольствием этого не делал. Создание обертки также кажется очень полезным знанием для изучения. - person Philip Borgström; 01.09.2015