[請益] C++/DirectX9.0 取滑鼠位移
看板GameDesign (遊戲設計)作者rurumi0318 (C萌的把拔)時間15年前 (2010/11/22 20:32)推噓0(0推 0噓 13→)留言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
11/24 10:07, 1F
→
11/24 10:07, , 2F
11/24 10:07, 2F
→
11/24 10:08, , 3F
11/24 10:08, 3F
→
11/24 10:08, , 4F
11/24 10:08, 4F
→
11/24 11:56, , 5F
11/24 11:56, 5F
→
11/24 11:56, , 6F
11/24 11:56, 6F
→
11/24 22:04, , 7F
11/24 22:04, 7F
→
11/25 03:16, , 8F
11/25 03:16, 8F
→
11/25 03:16, , 9F
11/25 03:16, 9F
→
11/25 03:17, , 10F
11/25 03:17, 10F
→
11/25 03:17, , 11F
11/25 03:17, 11F
→
11/25 03:17, , 12F
11/25 03:17, 12F
→
11/25 03:19, , 13F
11/25 03:19, 13F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章
46
64
38
75