2015-09-01 135 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