我已經玩了OpenGL的幾個月和OS X上的C++過剩。我現在試圖使用OpenGL的Java(使用JOGL)但我無法弄清楚這個問題。在OS X上的Java輸入,沒有鍵重複,但與谷歌是
隨着過剩,如果我按下一個鍵並保持按下,glut會繼續接收事件,而我在輸出中看到的是一系列被按下的字母。 但是,使用JOGL,我無法得到這種行爲。相反,我只得到一個字母被按下。
我知道,在OS X上,這實際上是一個系統的事情,以防止關鍵重複,但那麼如何來過剩繞過呢?有沒有辦法通過JOGL獲得這種繞行?
我試過了,使用下面的代碼來獲得要重複的密鑰,但是當我按下一個按鍵時,一個單一的按鍵打印出現在我的終端上,而不是像一系列的過剩像過剩。
這是我到目前爲止已經試過
class keyTest implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("dada "+arg0.getKeyChar());
return false;
}
}
KeyboardFocusManager man = KeyboardFocusManager.getCurrentKeyboardFocusManager();
man.addKeyEventDispatcher(new keyTest());
我也試過
glcanvas.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("keypressed: "+arg0.getKeyChar());
}
});
以同樣不受歡迎的行爲:只印一個關鍵,而不是它的一個系列。
編輯:我已經看到在OS X的終端禁用自動重複塊的一些終端命令,但這將打敗java提供的便攜性優勢。
編輯2:我試過使用lwjgl,並且我能夠獲得該庫的重複鍵行爲。雖然邏輯不同。使用lwjgl,我測試了if (Keyboard.isKeyDown(Keyboard.getEventKey()))
,然後爲每個關鍵字符做了一個switch case,與我習慣java的事件監聽和反應相反。我仍然想知道如何用JOGL做到這一點。