• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            孔雀開發(fā)小屋

            專注并致力于手機(jī)客戶端開發(fā)
            <2010年3月>
            28123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            • 隨筆 - 103
            • 文章 - 0
            • 評(píng)論 - 251
            • 引用 - 0

            常用鏈接

            留言簿(38)

            隨筆分類

            隨筆檔案

            關(guān)注的博客

            朋友的博客

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            DirectInput入門
            我想在博客里記錄一些學(xué)習(xí)DirectX的筆記。這是第一篇。
            一直以來對(duì)于DirectX的一套沒有花時(shí)間去學(xué)習(xí),3D圖形api也是學(xué)習(xí)了OpenGL,相當(dāng)長(zhǎng)的一段時(shí)間里,總是認(rèn)為自己不會(huì)去接觸這些。到公司寫了快一年的游戲邏輯了,才明白邏輯固然很重要,但是寫邏輯寫一年和寫兩年的區(qū)別不大。做游戲,做網(wǎng)游不就那幾個(gè)大塊么,圖形,網(wǎng)絡(luò),數(shù)據(jù)庫,io并發(fā)。寫邏輯是要寫的,但終究需要在某一領(lǐng)域有所專長(zhǎng),才是正道。

            言歸正傳吧。

            DirectInput是一個(gè)不依賴硬件的虛擬輸入系統(tǒng),是建立于硬件抽象層(HAL)之上的接口。

            微軟的DirectX一套均采用COM開發(fā),所以無論DDraw還是DirectInput的構(gòu)建、設(shè)置、使用,代碼都相差無多。基本步驟都是建立xxx接口對(duì)象,建立xxx設(shè)備,設(shè)置xxx相關(guān)屬性(參數(shù)),使用之。

            我們要在應(yīng)用程序中使用DirectInput,分以下三步走。
            1)初始化
            2)獲取設(shè)備狀態(tài)
            3)根據(jù)設(shè)備狀態(tài),進(jìn)行你的自定義處理。

            我這里給出一個(gè)簡(jiǎn)單的例子。該例子就是在標(biāo)準(zhǔn)的windows應(yīng)用程序中使用DirectInput所需的步驟。
            首先需要包含必要的宏定義和頭文件
            1 #define INITGUID
            2 #include <objbase.h>
            3 #include <dinput.h>

            相關(guān)的全部變量:
            LPDIRECTINPUT       g_dinput = NULL;
            LPDIRECTINPUTDEVICE g_Keyboard 
            = NULL;


            建立初始化函數(shù):

             1 BOOL InitDirectInput(HINSTANCE hInstance)
             2 {
             3     // 創(chuàng)建DirectInput對(duì)象
             4     if (DI_OK != DirectInputCreate(hInst, DIRECTINPUT_VERSION, &g_dinput, NULL))
             5         return FALSE;
             6 
             7     // 創(chuàng)建鍵盤設(shè)備
             8     if (DI_OK != g_dinput->CreateDevice(GUID_SysKeyboard, &g_Keyboard, NULL))
             9         return FALSE;
            10 
            11     // 設(shè)置協(xié)作等級(jí)
            12     if (DI_OK != g_Keyboard->SetCooperativeLevel(g_hWnd, DISCL_NONEXCLUSIVE|DISCL_BACKGROUND))
            13         return FALSE;
            14 
            15     // 設(shè)置數(shù)據(jù)格式
            16     if (DI_OK != g_Keyboard->SetDataFormat(&c_dfDIKeyboard))
            17         return FALSE;
            18 
            19     // 獲取設(shè)備
            20     if (DI_OK != g_Keyboard->Acquire())
            21         return FALSE;
            22 
            23     return TRUE;
            24 }

            在哪里使用呢?我們?cè)趙indows消息循環(huán)里面,處理完消息之后:
             1     unsigned char keyboard_state[256];
             2     // Main message loop:
             3     while (GetMessage(&msg, NULL, 00)) 
             4     {
             5         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
             6         {
             7             TranslateMessage(&msg);
             8             DispatchMessage(&msg);
             9         }
            10 
            11         g_Keyboard->GetDeviceState(256, (LPVOID)keyboard_state);
            12         if (keyboard_state[DIK_UP])
            13         {
            14             ::MessageBox(NULL, "up""msg", MB_OK);
            15         }
            16     }

            基本就是這些了。

            我這里主要是作為學(xué)習(xí)筆記留在blog上,說的不清楚或者不專業(yè)或者其他原因讓你沒有看明白的,請(qǐng)看
            《windows游戲編程大師技巧》一書。






            posted on 2010-03-30 23:55 孔雀 閱讀(2459) 評(píng)論(7)  編輯 收藏 引用 所屬分類: C/C++

            評(píng)論

            # re: DirectInput入門 2010-03-31 08:17 Code Knight

            其實(shí)寫邏輯是很考驗(yàn)設(shè)計(jì)能力的,到現(xiàn)在為止我還沒看到過非常優(yōu)雅的邏輯代碼,大篇幅為實(shí)現(xiàn)功能而寫的代碼凌亂不堪,沒有美感,一般來說沒有專職寫過兩年以上邏輯的程序員都意識(shí)不到自己寫的代碼有多么亂,不是沒有設(shè)計(jì),就是設(shè)計(jì)不好。

            # re: DirectInput入門 2010-03-31 09:26 溪流

            @Code Knight
            是啊是啊,整個(gè)工程老是有一部分地方是亂的,這部分正是邏輯

            # re: DirectInput入門 2010-03-31 09:27 溪流

            跟樓主學(xué)習(xí)dx~

            # re: DirectInput入門 2010-03-31 13:29 普派官方網(wǎng)站

            是見對(duì)方是你嗎愛的

            # re: DirectInput入門 2010-04-02 14:44 好文章

            挺好的,正好對(duì)這方面有興趣

            # re: DirectInput入門 2010-04-06 14:07 陳排

            真的開始弄DX了么??

            # re: DirectInput入門[未登錄] 2010-10-14 15:56 ccsdu2009

            支持你阿 等你弄好了 給我一個(gè)dinput插件 我?guī)投ǖ轿业挠螒蛞嬷腥グ?哈哈
            99精品国产在热久久| 日韩十八禁一区二区久久| 久久精品国产网红主播| 国产精品久久久久久吹潮| 久久精品中文字幕久久| 伊人久久一区二区三区无码| 久久久久亚洲AV无码麻豆| 久久久久亚洲av毛片大| 亚洲精品乱码久久久久久 | 午夜精品久久久久9999高清| 亚洲中文字幕无码久久综合网| 国产Av激情久久无码天堂| 久久精品国产一区二区三区不卡 | 很黄很污的网站久久mimi色| 久久无码高潮喷水| 99热都是精品久久久久久| 亚洲国产精品无码久久98| 久久久这里有精品中文字幕| 国产精品久久免费| 无码人妻精品一区二区三区久久久 | 久久精品无码一区二区日韩AV| 中文字幕乱码人妻无码久久| 久久国产精品波多野结衣AV| 国产V亚洲V天堂无码久久久| 国内精品九九久久精品| 免费精品久久久久久中文字幕| 青青草国产成人久久91网| 久久成人国产精品| 97久久久精品综合88久久| 久久人人爽人人爽人人AV| 久久国产乱子伦免费精品| 欧美黑人又粗又大久久久| 少妇精品久久久一区二区三区| 久久久久久久久久久| 久久精品卫校国产小美女| 久久99精品国产麻豆宅宅| 久久人妻AV中文字幕| 亚洲精品乱码久久久久久| 久久精品国产99久久无毒不卡 | 99久久亚洲综合精品网站| 久久国产乱子伦精品免费强|