2015-09-01 233 views
1

问题 我正在开发一个自定义硬件控制器,我想在使用Java进行处理后将其输入映射到虚拟XInput控制器。基本上,对于所有意图和目的,我想直接从java控制XInput控制器。Java虚拟游戏手柄

解决方案我已经想到了

  • 编写设备驱动程序,这似乎是在我很乐意避免屁股真正的痛苦。我从来没有写过设备驱动程序,也不知道如何注册XInput控制器。这似乎需要很长时间才能完成,我没有时间也不想花费。
  • 使用PPJoy和this库。我想避免这种情况,因为PPJoy已经过时了(自上次更新后我可以找到超过10年),并且需要额外的图层来将DirectInput转换为XInput。图书馆也拒绝为我编译。
  • VJoy开发包装。但是,这需要将DirectInput重新映射到XInput。我不熟悉C/C++包装,但到目前为止,这似乎是最好的选择。

有没有人有一个好主意如何解决这个问题?我曾考虑过跳过XInput并使用Robot(AWT)的键盘/鼠标来完成它,但游戏拒绝接受软件输入,很可能他们只读取硬件数据。模拟键盘/鼠标会很好,但不是最优的,因为它会比较笨拙,但我不能找到一种方式来让游戏识别。所有帮助赞赏!

回答

0

编写一个包装器,你不需要知道任何,我重复任何C++代码,如果你真的不想。只需使用swig即可。有很多例子,从basic开始。 (注意,我不打算列举例子,因为那里已经有足够的东西了)。如果您无法发表评论,我会帮您解决。

编辑 好吧,我会是很好的,简单的例子,假设你有一个example.h文件文件,在同一位置创建一个example.i:

%module example 

%{ 
#include "example.h" 
%} 

%include "example.h" 

确保痛饮是那么你的路径做:

%swig -java example.i 

然后,你需要建立一个本地Java库,比如它是如何做here,(注意你不需要做所有的东西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程序时,你将不得不坚持你的路径与任何其他相关的libararies。注意如果你编译一个32位的库,你需要使用一个32位的jvm。

+0

谢谢:)以后我会试试看,好像我吃了一些不好的东西,所以我现在在床上,不能试用它。 VJoy周围的包装看起来是最好的选择。这不是我无法读/写C++,我只是很乐意避免这样做。制作包装似乎也是非常有用的知识。 –

+0

快点好起来! – Snickers3192