[請益] C++/DirectX9.0 取滑鼠位移

看板GameDesign (遊戲設計)作者 (C萌的把拔)時間15年前 (2010/11/22 20:32), 編輯推噓0(0013)
留言13則, 3人參與, 最新討論串1/2 (看更多)
各位好,小弟目前要做一個功能: 依照滑鼠位移去對camera 做一些動作,有點像一般MMO RPG 那樣 壓著右鍵移動滑鼠才能旋轉鏡頭,但滑鼠位置不會改變。 現在卡在取mouse delta 的時候碰到一些小問題 我知道Direct Input 可以直接拿到mouse dX 和dY 但之前看GameDev 有人討論說mouse/keyboard 盡量不要用Direct Input 所以就不考慮他 我的方法大致上是這樣: 在game loop 裡面 1. 先記錄原先的mouse point (prePoint) 2. 用GetCursor 得到新的滑鼠座標 (pos) 3. dX = pos.x - prePoint.x 4. dY = pos.y - prePoint.y 5. 用SetCursorPos 把滑鼠放回原本的位置 (prePoint) 問題是測試時,滑鼠會一直有閃爍的現象 (移動之後又被放回原本的地方) 我上網goo 了一下只有得到把滑鼠隱藏起來這個解法 不知道有沒有人有類似的經驗或方法可以分享? 謝謝 code 大致上長這樣: MainWndProc =========================== switch(msg) { case WM_MOUSEMOVE: return 0; case WM_RBUTTONDOWN: bLockPoint = true; // 壓下右鍵 return 0; case WM_RBUTTONUP: bLockPoint = false; // 放開右鍵 return 0; ... } Update DX and DY =========================== POINT pos; GetCursorPos(&pos); // get mouse point ScreenToClient(gd3dApp->getMainWnd(), &pos); // 轉換至視窗座標 // mouse delta DX = pos.x - mPrePoint.x; DY = pos.y - mPrePoint.y; if(!bLockPoint) { mPrePoint = pos; // 更新 mPrePoint } else { // lock mouse point // 將滑鼠移回上個 loop 時的位置 pos = mPrePoint; ClientToScreen(gd3dApp->getMainWnd(), &pos); SetCursorPos(pos.x, pos.y); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.26.40

11/24 10:07, , 1F
其實setcursorpos不是很推...這會造成視窗化的時候的問
11/24 10:07, 1F

11/24 10:07, , 2F
題,另外游標會抖是一定的阿 XD
11/24 10:07, 2F

11/24 10:08, , 3F
而且你這種寫法感覺上會造成fps不同下滑鼠抖抖抖程度不
11/24 10:08, 3F

11/24 10:08, , 4F
同,低fps下會更明顯 :D
11/24 10:08, 4F

11/24 11:56, , 5F
隱藏真滑鼠...是要做假滑鼠的意思嗎0.0
11/24 11:56, 5F

11/24 11:56, , 6F
感覺是還不錯的方法啊0.0>
11/24 11:56, 6F

11/24 22:04, , 7F
如果想達成上面描述的效果, 還有甚麼比較建議的方法嗎?
11/24 22:04, 7F

11/25 03:16, , 8F
看你在windowed底下要怎麼處理 沒打算處理windowed的話
11/25 03:16, 8F

11/25 03:16, , 9F
其實怎樣都可以啦... 把真滑鼠藏起來 完全用dx/dy來操作
11/25 03:16, 9F

11/25 03:17, , 10F
ui面的滑鼠游標我們也玩過 =P 只是我不懂為啥不用
11/25 03:17, 10F

11/25 03:17, , 11F
DXInput? 他的確寫起來頗麻煩 可是也只要wrap一次就搞定
11/25 03:17, 11F

11/25 03:17, , 12F
啦 遠比用setCursorPos造成的往後ui層介接的麻煩小的多
11/25 03:17, 12F

11/25 03:19, , 13F
另外要假就假到底 setCursorPos永遠設成畫面中心更方便
11/25 03:19, 13F
文章代碼(AID): #1CwcBtWG (GameDesign)
文章代碼(AID): #1CwcBtWG (GameDesign)