标题可能有点误导,不知道如何解决我的问题。
基本上我正在做的是使用keyboardlistener找出哪些键已经关闭,并根据我移动我的游戏角色。
问题是,当您单击窗口外,在按住某个键时,我的监听器不会注册keyReleased事件。
我试图通过使用鼠标监听器和mouseExited事件来修复它,但这并不是一直修复它,有时它确实有时它没有。
继承我的实施:
键盘:
public void mouseLeftWindow()
{
for(int i =0;i<KEY_COUNT;i++)
{
keys[i] = false;
}
}
@Override
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode>=0 && keyCode<KEY_COUNT)
{
keys[keyCode] = true;
}
}
@Override
public void keyReleased(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode>=0 && keyCode<KEY_COUNT)
{
keys[keyCode] = false;
}
}
其中keys []是boolean []描述,按下哪些代码
小鼠
@Override
public void mouseExited(MouseEvent e)
{
mouseMoved(e);
keyboard.mouseLeftWindow();
}
答案 0 :(得分:2)
即使您的鼠标退出组件,您的程序也会监听其他重要事件。这意味着您在退出时将所有内容设置为false,但如果仍然按下某个键,则会立即再次设置为true。我认为你正在寻找一个FocusListener而不是MouseListener。
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
}
@Override
public void focusLost(FocusEvent e) {
keyboard.mouseLeftWindow();
}
});