Java——在按键事件后立即调用KeyReleased
当用户按下四个箭头键(或wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色应继续移动,并且在用户释放键后应停止移动 在大多数情况下,这是令人感动的。然而,当快速切换方向时,我得到了一些奇怪的延迟。看起来,当我按下键盘按钮时,java的keylistener将其解释为一个键“点击”,即快速按下并释放,然后确定按钮实际上被按下 因此,播放器模型的运动有点结巴 我的解释正确吗?这是我的代码,如果有人能理解的话 处理密钥释放的代码Java——在按键事件后立即调用KeyReleased,java,input,keypress,keyevent,keyrelease,Java,Input,Keypress,Keyevent,Keyrelease,当用户按下四个箭头键(或wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色应继续移动,并且在用户释放键后应停止移动 在大多数情况下,这是令人感动的。然而,当快速切换方向时,我得到了一些奇怪的延迟。看起来,当我按下键盘按钮时,java的keylistener将其解释为一个键“点击”,即快速按下并释放,然后确定按钮实际上被按下 因此,播放器模型的运动有点结巴 我的解释正确吗?这是我的代码,如果有人能理解的话 处理密钥释放的代码 @Override public void
@Override
public void keyReleased(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.stopMoving();
break;
case KeyEvent.VK_SPACE:
break;
case KeyEvent.VK_ESCAPE:
break;
}
keyPress = false;
}
处理按键的代码
@Override
public void keyPressed(KeyEvent e)
{
keyPress = true;
keyCode = e.getKeyCode();
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
GameController.hero.setSpeedBase(new Point(0,-1));
break;
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
GameController.hero.setSpeedBase(new Point(-1,0));
break;
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
GameController.hero.setSpeedBase(new Point(0,1));
break;
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.setSpeedBase(new Point(1,0));
break;
}
}
我希望这是足够的信息。感谢您的帮助!如果有任何需要澄清的地方,请告诉我。有更简单的方法吗?这是一篇老文章,但对于将来可能访问此页面的人,我的答案如下 KeyListener将按键作为文本编辑器处理。当您按住一个键时,您会注意到在编辑器开始重复它之前有一个延迟 为了用Java制作游戏,我们通常会制作另一个线程来处理输入,KeyListener只需更改游戏循环中检查的一些标志 不久前我做了一个视频,字幕是葡萄牙语的,但是代码是以可见的字体显示的
致以最诚挚的问候。基本测试对我来说似乎很好…也许是一个重复问题的可运行演示…我将包括一个可运行jar演示。谢谢只是开玩笑。我不知道如何在堆栈溢出上做到这一点:(看,它应该有一个主方法来设置程序,可以反复演示您遇到的问题。。。