Re: [問題] 滑鼠鍵擊的控制

看板C_and_CPP (C/C++)作者 (豬怕龍)時間16年前 (2009/10/13 15:23), 編輯推噓2(2016)
留言18則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《KanoLoa (卡)》之銘言: : ※ 引述《karta031736 (豬怕龍)》之銘言: : : 小弟現在在做畢業專題 : : 寫的是遊戲 遊戲中由左鍵來控制想到達的目的地 : : 用的是WM_LBUTTONDOWN 和 WM_LBUTTONUP : : 當滑鼠左鍵按下時 設定人物往目的地前進 : : 但是要是滑鼠按下之後就沒放開 在移動游標的話 : : 目的地會一直更換 : : 我想問 : : 我怎樣才可以按下左鍵之後目的地就只有一個 : : 如果想要換目的地就一定要放開滑鼠在按一次 : : 麻煩會的人教教我 感謝~ : bool LButtonReset = true ; : //設定一個開關:紀錄上次左鍵是否有復原 : //這是你遊戲架構的時脈回圈 : while(…){ : //如果左鍵按下,而且左鍵已經回復 : if(WM_LBUTTONDOWN && LButtonReset) : { : //去目標點X,Y : Go(X,Y); : //左鍵尚未復原 : LButtonReset = false ; : } : //如果左鍵沒有按下,那左鍵復原回到true : if(!WM_LBUTTONDOWN) : LButtonReset = true ; : } 下面是原本的程式 switch (uMsg) { case WM_LBUTTONDOWN: ptCursor = CPoint(lParam); bLBtn = true; break; case WM_LBUTTONUP: ptCursor = CPoint(lParam); bLBtn = false; break; . . . default: return CD3DWin::WindowProc(uMsg, wParam, lParam); } 完整描述一下情形 當我左鍵按下時 bLBtn = true 人物就可以走動 因為我設定是人物一直停留在視窗中心 所以人物走動時變換的是下面的地圖 因為我游標沒有動 所以游標在地圖上的位置會一直往人物移動的方向換(大家懂那意思吧...) 而當我左鍵按下時 ptCursor = CPoint(lParam); 就會因為一直抓座標值的關係目的地也一直更換了 現在 問題就是我可以怎麼改 讓他在左鍵按下時只抓一次的值就好了 依上面大哥的寫法 我把它寫成下面這樣 bool bLBtnReset = true; switch (uMsg) { case WM_LBUTTONDOWN: if(bLBtnReset) { ptCursor = CPoint(lParam); bLBtn = true; } bLBtnReset = false; break; case WM_LBUTTONUP: ptCursor = CPoint(lParam); bLBtn = false; bLBtnReset = true; break; . . . default: return CD3DWin::WindowProc(uMsg, wParam, lParam); } 這樣也是不行 不知道我是哪裡有問題一一" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.109.108

10/13 17:45, , 1F
你每次迴圈都重新宣告reset回到 true ?
10/13 17:45, 1F

10/13 18:12, , 2F
我把bLBtnReset設為全域變數了 也改了程式 變成下面
10/13 18:12, 2F

10/13 18:13, , 3F
case WM_LBUTTONDOWN:
10/13 18:13, 3F

10/13 18:13, , 4F
if(bLBtnReset) {
10/13 18:13, 4F

10/13 18:14, , 5F
ptCursor = CPoint(lParam);
10/13 18:14, 5F

10/13 18:14, , 6F
bLBtn = true;
10/13 18:14, 6F

10/13 18:15, , 7F
bLBtnReset = false; }
10/13 18:15, 7F

10/13 18:15, , 8F
else bLBtn = false;
10/13 18:15, 8F

10/13 18:16, , 9F
break;
10/13 18:16, 9F

10/13 18:17, , 10F
case WM_LBUTTONUP:
10/13 18:17, 10F

10/13 18:17, , 11F
.
10/13 18:17, 11F

10/13 18:17, , 12F
.
10/13 18:17, 12F

10/13 18:18, , 13F
bLBtnReset = true; break;
10/13 18:18, 13F

10/13 18:19, , 14F
我在寫啥@@ 排版好爛...大家通融一下 幫我看看~
10/13 18:19, 14F

10/13 22:00, , 15F
非常亂,if裡面盡量不要有break , 更亂
10/13 22:00, 15F

10/13 22:01, , 16F
bLBtn 的功能是否跟 WM_LBUTTON重複了
10/13 22:01, 16F

10/14 02:22, , 17F
break是 case的 bLBtn=true時 角色才可以走動
10/14 02:22, 17F

10/14 02:23, , 18F
所以在WM_LBUTTONUP裡面才寫 bLBtn = false;
10/14 02:23, 18F
文章代碼(AID): #1Ar2hy6E (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Ar2hy6E (C_and_CPP)