gpt4 book ai didi

Java——KeyPressed 事件后立即调用 KeyReleased

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:15 25 4
gpt4 key购买 nike

当用户按下四个箭头键(或 wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色就应该继续移动,一旦用户释放按键,角色就应该停止移动。

在很大程度上,这是令人感动的。然而,当快速切换方向时,我遇到了一些奇怪的延迟。看起来好像,当我按下键盘按钮时,java 的按键监听器将其解释为按键“单击”,即快速按下和释放,然后再确定该按钮实际上已被按下。

因此,玩家模型的运动会有点卡顿。

我的解释正确吗?这是我的代码,如果有人能理解的话。

处理按键释放的代码

    @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;
}

}

我希望这是足够的信息。任何帮助表示赞赏!如果我可以做任何澄清,请告诉我。有没有更简单的方法来做到这一点?

最佳答案

这是一篇旧帖子,但对于 future 可能访问此页面的人来说,这是我的答案

KeyListener 作为文本编辑器处理按键。当您按住某个键时,您会注意到编辑器开始重复它之前有一个延迟。

为了用 Java 制作游戏,我们通常会创建另一个线程来处理输入,KeyListener 只是更改游戏循环中检查的一些标志

我前段时间制作了一个关于此的视频,字幕是葡萄牙语,但代码以可见的字体大小存在。

https://www.youtube.com/watch?v=f7M9eAkNS8s

致以诚挚的问候。

关于Java——KeyPressed 事件后立即调用 KeyReleased,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com