Kevin的DirectInput簡明教程

2021-04-18 05:54:48 字數 2086 閱讀 3702

使用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...