2014-01-11 107 views
0

這裏是我用來檢查2D基本遊戲的用戶輸入的鍵盤迴調方法的定義。不過,我在處理某些同時按鍵時遇到問題。使用GLFW處理輸入

例如,如果我按住右箭頭鍵和上箭頭鍵,播放器會按照它應該向屏幕右上角移動45度。然後,在按住向上和向右鍵的同時按下空間(發射彈丸),這也起作用。但是,如果我按住左箭頭鍵和下箭頭鍵,播放器會按照它的方式移動,但是當我按下空格時,我沒有輸入響應,所以在向下和向左移動時我不能射擊彈丸。所有其他運動+火射彈組合工作,只是向下和左不......我不明白爲什麼。有任何想法嗎?

if (key == GLFW_KEY_LEFT) 
{ 
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_LEFT, action); 
} 
else if (key == GLFW_KEY_RIGHT) 
{ 
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_RIGHT, action); 
} 
else if (key == GLFW_KEY_UP) 
{ 
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_UP, action); 
} 
else if (key == GLFW_KEY_DOWN) 
{ 
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_DOWN, action); 
} 
else if (key == GLFW_KEY_SPACE) 
{ 
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_SPACE, action); 
} 
else { } 

回答

1

Rollover是允許鍵盤一次正確註冊許多按鍵的屬性。鍵盤以行和列連接。即使鍵盤不是方形的,各個鍵也處於連接它們的開關的大致矩形的導線矩陣中。控制器連接一行,然後測試以查看哪些列被擊中。一些關鍵組合「影」了其他人。控制器可以知道輸入何時不明確並且不發送密鑰。

更好的鍵盤使用二極管排列,以避免歧義,從而支持「全面翻轉」,雖然實際上USB限制你所有的修改器加上6個不同的鍵碼一次。