使用directinput可分為以下5個步驟:
1. 獲得directinput介面idirectinput8,可通過下面的全域性函式獲得:
hresult directinput8create(
hinstance hinst, //應用程式的handle
dword dwversion, //directinput的版本號:directinput_version
refiid riidltf, //directinput的guid:iid_idirectinput8
lpvoid * ppvout, //指向lpdirectinput8的指標
lpunknown punkouter //null
);2. 建立裝置idirectinputdevice8,使用idirectinput8介面的方法:
hresult createdevice(
refguid rguid, //裝置的guid
lpdirectinputdevice * lplpdirectinputdevice, // 指向裝置介面
lpunknown punkouter //null
);鍵盤的guid: guid_syskeyboard
滑鼠的guid: guid_sy**ouse
遊戲控制器的guid可以通過idirectinput8的enumdevices方法列舉出來
3. 初始化裝置
a. 設定資料格式:
使用idirectinputdevice8的方法:
hresult setdataformat(
lpcdidataformat lpdf //資料格式
);directinput中定義了下面的3種裝置的資料格式,可以直接使用
c_dfdikeyboard
c_dfdimouse
c_dfdijoystick
b. 設定協作等級:
使用idirectinputdevice8的方法:
hresult setcooperativelevel(
hwnd hwnd, //視窗的handle
dword dwflags //屬性
);協作等級的屬性可以由下面的常量來定義:
discl_background —— 允許視窗以後臺方式訪問裝置
discl_foreground —— 只能以前臺方式訪問裝置
discl_exclusive —— 獨佔模式
discl_nonexclusive —— 非獨佔模式
discl_nowinkey —— 不使用windows鍵
4. 獲得使用權
獲得裝置使用權,使用idirectinputdevice8的方法:
hresult acquire();
放棄使用權,使用idirectinputdevice8的方法:
hresult unacquire();
順利完成以上工作以後我們就可以通過directinput來訪問裝置狀態了!
5. 訪問裝置狀態
訪問裝置狀態通過idirectinputdevice8的getdevicestate()方法來實現
hresult getdevicestate(
dword cbdata, //lvpdata指向緩衝區的大小
lpvoid lpvdata //指向用來儲存裝置狀態的結構體
);以下是3種裝置所使用的狀態儲存結構
a. 訪問鍵盤
使用乙個包含256個字元的陣列作為資料緩衝區
每個按鍵的虛擬鍵值都在dinput.h中給出:dik_*
b. 訪問滑鼠
使用dimousestate型別作為緩衝區
c. 訪問遊戲控制器
使用dijoystate型別作為緩衝區
遊戲中只需在每一幀都呼叫getdevicestate()方法來獲取輸入裝置的狀態,然後根據輸入裝置狀態更新遊戲邏輯即可。
Kevin自述(翻譯版)
出發我的職業路線在我生命中出現的比較早.我是乙個隨遇而安的孩子,但的確比較煩人.在我老爸離婚的時候我才3歲,我母親靠去做服務生而維持生計.想我那個年齡的孩子都應該在母親的懷裡,不幸的日子總是飄浮不定,但讓我頭腦更清醒.我就是這樣的乙個孩子.我成長在聖凡南多市,valley社團給我了到洛杉基學習的機會...
Kevin原創 CentOS安裝bugfree
bugfree是借鑑微軟的研發流程和bug管理理念,基於php和mysql由一淘測試團隊工具組負責開發完成 的乙個bug管理系統。bugfree簡單實用 免費並且開放源 因此也有一些網際網路公司使用這個bug管理系統,下面我就把在centos上的安裝過程和大家分享一下。1.安裝apache 2.安裝...
container of 的的的原理
另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...