我正在使用GLUT並開發一個FPS遊戲。我需要一種方法來捕捉鼠標,以便相機繼續移動,因爲現在當鼠標位置超出監視器限制時,無法計算X中的變化或Y中的變化。我怎樣才能「捕捉」鼠標GLUT?誘捕鼠標?
感謝
我正在使用GLUT並開發一個FPS遊戲。我需要一種方法來捕捉鼠標,以便相機繼續移動,因爲現在當鼠標位置超出監視器限制時,無法計算X中的變化或Y中的變化。我怎樣才能「捕捉」鼠標GLUT?誘捕鼠標?
感謝
我建議用現成的發動機一樣OGRE 3D代替,但如果你真的要推倒重來,這裏的如何...
在所有情況下,我所知道的,PC FPS遊戲通過註冊鼠標動作回調來「捕捉」指針,注意相對運動,然後將指針變回到窗口中心。
下面是一些代碼我寫的鼠標輸入添加到樣品乒乓球檯在OpenGL與C++課程一年或兩年前:
void resetPointer() {
glutWarpPointer(TABLE_X/2, TABLE_Y/2);
lastMousePos = TABLE_Y/2;
}
void mouseFunc(int sx, int sy) {
if (!started) { return; }
int vertMotion = lastMousePos - sy;
lastMousePos = sy;
player1.move(vertMotion);
// Keep the pointer from leaving the window.
if (fabs(TABLE_X/2 - sx) > 25 || fabs(TABLE_Y/2 - sy) > 25) {
resetPointer();
}
}
// This goes in with your "start new game" code if you want a menu
resetPointer();
glutSetCursor(GLUT_CURSOR_NONE);
glutPassiveMotionFunc(mouseFunc);
,只會追蹤垂直運動,但添加水平是微不足道。
「if(fabs(TABLE_X/2-sx)> 25 || fabs(TABLE_Y/2-sy)> 25)」是什麼意思?爲什麼不在每一幀中更換鼠標? – Calvin1602 2010-09-09 10:54:30
從技術上講,框架和鼠標移動事件並不是一回事。無論如何,我不記得確切,但我認爲這是爲了防止XWarpPointer(glutWarpPointer在Linux上使用)成爲一個問題。示例代碼的基於時間間隔的計時大大地擴大了存在的任何性能問題,並且我沒有時間完全重寫它。 – ssokolow 2010-09-09 19:28:59
有趣的標題... hehehe ... – 2010-09-04 19:51:38
使用捕鼠器。咄。 – BoltClock 2010-09-04 19:58:45
@BoltClock:別忘了奶酪。 – 2010-09-04 20:04:28