当用户按下四个箭头键(或wasd)时,我试图让一个角色在一个简单的框架上移动。只要按住箭头键,角色就应该继续移动,并且一旦用户释放钥匙就应该停止移动。
在大多数情况下,这种情况正在发生变化。但是,当快速切换方向时,我会遇到一些奇怪的延迟。看起来,当我按下键盘按钮时,java的keylistener将此解释为一个键&#34;点击&#34;,AKA快速按下并释放,然后确定按钮实际被按下。< / p>
因此,玩家模型的动作会稍微停滞不前。
我是否正确地解释了这一点?这是我的代码,如果有人能理解这一点。
处理密钥发布的代码
@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;
}
}
我希望这是足够的信息。任何帮助表示赞赏!如果我能做出任何澄清,请告诉我。有更简单的方法吗?
答案 0 :(得分:1)
这是一篇很老的帖子,但对于未来可能访问此页面的人来说,这是我的回答
KeyListener将按键作为文本编辑器处理。当您按住某个键时,您会注意到编辑器开始重复之前有一段延迟。
要使用Java制作游戏,我们通常会创建另一个线程来处理输入,KeyListener只会更改在游戏循环中检查的一些标志
我前段时间制作了一段视频,标题是葡萄牙语,但代码在那里有可见的字体大小。
https://www.youtube.com/watch?v=f7M9eAkNS8s
最好的问候。