電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
常見問題
搜尋
會員列表
會員群組
會員註冊
個人資料
登入檢查您的私人訊息
登入
輸入您的搜尋字詞
提交搜尋表單
DirectInput & Xinput - 遊戲手把控制器範例
電腦遊戲製作開發設計論壇 首頁
->
遊戲程式中級班:資料結構、Win32 API、各種視窗函式庫
上一篇主題
::
下一篇主題
發表人
內容
Director
偶而上來逛逛的過客
註冊時間: 2013-11-04
文章: 13
381.66 果凍幣
發表於: 2015-6-9, AM 8:15 星期二
文章主題: DirectInput & Xinput - 遊戲手把控制器範例
前陣子為了在平板上面玩遊戲,買了支遊戲手把,原本朋友推薦買的是XBOX的,說是插在電腦上就可以直接用,其他的(如PS DualShock手把)就還得配合模擬器。
當下覺得有點奇怪,怎麼會有作業系統能辨識的裝置卻不能使用?
後來因為配合平板那邊的驅動買了PS4的手把,奇妙的是把它接在電腦上玩《Ys Origin》,明明是這麼老的遊戲卻能毫無問題的使用手把。
查了一下才知道只是裝置訊號走的協定不一樣而已,DualShock走的是DirectInput而XBOX則是DirectInput和XInput都可以。
一般來說能走XInput就走那個比較好,尤其是XBOX手把,不然會喪失震動以及一部分按鍵的功能。
買了手把之後開始熱衷用手把玩遊戲的我,心血來潮就寫了個綜合的手把類別,無論DirectInput或是XInput的裝置辨別方式都做好了,附帶一個統一的狀態輸出介面。
可能很多人都做過了,但還是分享給大家參考
引言回覆:
Function
1. 偵測作業系統連接的手把裝置(支援多個手把同時)
2. 統一DirectInput及XInput的手把狀態介面
引言回覆:
Class
Gamepad
: 手把主介面
GamepadState
: 手把資訊介面
引言回覆:
Example
※輸出格式如下
-1~1 float: Stick是搖桿,值為XY軸
0~1 float: Trigger是板機,值為按壓幅度
boolean: Dpad是方向鍵
boolean: Button是按鍵陣列
代碼:
// main.cpp
//---------------------------------------------------------
// 作者: DR
// 2015/06/09
//
// DirectInput & Xinput - 遊戲手把控制範例
//---------------------------------------------------------
//
#include <iostream>
#include <thread>
#include <string>
#include <conio.h>
#include "Gamepad.h"
int main(int argc, char **argv)
{
Gamepad wc;
wc.CheckDevice();
while(1){
std::this_thread::sleep_for(std::chrono::milliseconds(1000/20));
system("cls");
// Check devices when user presses 'c'
if( _kbhit() ){
char tmpInput = _getch();
if( tmpInput == 'c' )
wc.CheckDevice();
}
if(wc.GetDeviceCount() == 0){
std::cout << "There is no connected controller." << std::endl;
continue;
}
for(unsigned int i=0 ; i<wc.GetDeviceCount() ; i++){
GamepadState gs = wc.GetState(i);
std::cout << "<Controller " << i << ">" << std::endl;
std::cout << "StickL: " << gs.StickLX << ", " << gs.StickLY << std::endl
<< "StickR: " << gs.StickRX << ", " << gs.StickRY << std::endl
<< "Trigger: " << gs.TriggerL << ", " << gs.TriggerR << std::endl
<< "DpadU: " << gs.DpadU << std::endl
<< "DpadR: " << gs.DpadR << std::endl
<< "DpadD: " << gs.DpadD << std::endl
<< "DpadL: " << gs.DpadL << std::endl;
for(int i=0 ; i<32 ; i++)
if(gs.Button[i])
std::cout << "Button: " << i << std::endl;
std::cout << std::endl;
}
}
return 0;
}
Gamepad.rar
描述:
原始程式碼
下載
檔名:
Gamepad.rar
附件大小:
14.9 KB
下載次數:
共 501 次
回頂端
還是零分
散播福音的祭司
註冊時間: 2007-09-19
文章: 164
653.83 果凍幣
發表於: 2015-6-22, PM 7:40 星期一
文章主題:
雖然沒在用DirectInput
還是先收下了
回頂端
從之前的文章開始顯示:
所有文章
1 天
7 天
2 星期
1 個月
3 個月
6 個月
1 年
最舊的
最新的
電腦遊戲製作開發設計論壇 首頁
->
遊戲程式中級班:資料結構、Win32 API、各種視窗函式庫
所有的時間均為 台灣時間 (GMT + 8 小時)
第
1
頁(共
1
頁)
前往:
選擇一個版面
論壇事務區
----------------
論壇公告
版務討論
遊戲程式區
----------------
遊戲程式初級班:語法及基礎概念
遊戲程式中級班:資料結構、Win32 API、各種視窗函式庫
遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
遊戲程式進階班:各種進階圖型引擎或遊戲引擎
網路程式設計
遊戲程式演算法
程式概論
XNA
Facebook專區
iOS 程式開發區
多媒體程式設計
遊戲企劃區
----------------
遊戲企劃討論
奇幻文學區
遊戲設定參考資料
遊戲美術區
----------------
遊戲美術天地
遊戲討論區
----------------
遊戲新聞資訊
新OLG介紹區
天翼之鍊--王國之鷹
激戰(公會戰爭 Guild Wars)-Dog And Cat [DC] 台灣公會
《風》--Web三國
業餘遊戲區
----------------
各類遊戲分享
業餘遊戲製作軟體、語言、工具討論
綜合資訊區
----------------
哈啦交流園地
通識教育中心
遊戲企業招募人才版
板主碎碎唸
外國語言區
----------------
英文
日文
遊戲專案區
----------------
槍戰射擊遊戲
自製遊戲區
----------------
網龍盃專區
Neilshih的專區
mirror專區
您
無法
在這個版面發表文章
您
無法
在這個版面回覆文章
您
無法
在這個版面編輯文章
您
無法
在這個版面刪除文章
您
無法
在這個版面進行投票
您
可以
在這個版面附加檔案
您
可以
在這個版面下載檔案
Powered by
phpBB
© 2001, 2005 phpBB Group
正體中文語系由
phpbb-tw
維護製作