代码之家  ›  专栏  ›  技术社区  ›  Philip Borgström

Java虚拟游戏板

  •  1
  • Philip Borgström  · 技术社区  · 10 年前

    问题 我正在开发一个定制的硬件控制器,我想在用Java处理它之后,将它的输入映射到一个虚拟XInput控制器。基本上,出于所有意图和目的,我希望直接从java控制XInput控制器。

    我想到的解决方案

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

    有人知道如何解决这个问题吗?我曾考虑过跳过XInput,使用机器人(AWT)使用键盘/鼠标进行操作,但游戏拒绝接收软件输入,很可能他们只读取硬件数据。模拟键盘/鼠标会很好,但不是最佳的,因为它会很尴尬,但我无法找到一种方法以游戏识别的方式来实现。感谢所有帮助!

    1 回复  |  直到 10 年前
        1
  •  0
  •   Derrops    10 年前

    编写一个包装器,你不需要知道,如果你真的不想,我重复任何C++代码 swig 。有很多例子,从一些事情开始 basic 。(注意,我不打算包括示例,因为已经有足够的内容了)。如果你有问题,请留言,我会帮你解决的。

    编辑 好的,我会很好,举个例子,说你有个例子。h文件,创建一个示例。i位于同一位置:

    %module example
    
    %{
    #include "example.h"
    %}
    
    %include "example.h"
    

    确保swig在您的路径中,然后执行以下操作:

    %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程序时,您必须将其与任何其他依赖库一起保存在路径中。注意,如果编译32位库,则需要使用32位jvm。