gpt4 book ai didi

Java : Multiple keyboard input during "Timer" period

转载 作者:行者123 更新时间:2023-12-01 09:50:44 25 4
gpt4 key购买 nike

在我的学校,作为一项作业,我必须制作“SNAKE”游戏的改进版本。

(我不会添加进一步的描述,因为这是非常有名的)

我在处理键盘输入时遇到问题。

下面是我的代码的摘要。

<小时/>

代码

Initiation part

private final int DELAY = 500; //500ms every event

timer = new Timer(DELAY, this);
timer.start();

Keyboard input part (PROBLEM)

int key=e.getKeyCode();

if ((key == KeyEvent.VK_LEFT) && (!rightDirection)) {
leftDirection = true;
upDirection = false;
downDirection = false;
}

if ((key == KeyEvent.VK_RIGHT) && (!leftDirection)) {
rightDirection = true;
upDirection = false;
downDirection = false;
}

if ((key == KeyEvent.VK_UP) && (!downDirection)) {
upDirection = true;
rightDirection = false;
leftDirection = false;
}

if ((key == KeyEvent.VK_DOWN) && (!upDirection)) {
downDirection = true;
rightDirection = false;
leftDirection = false;
}
<小时/>

修复

我的程序无法正确处理多个快速输入。

例如,假设蛇向右移动。

ooooooO (->)

如果我在延迟期间(即 500 毫秒)快速按“向上”和“向左”,

然后蛇向左移动并用 body 移动。

oooooOo (<-)

我应该如何更改键盘输入部分来解决这个问题?

<小时/>

条件

教授给出了这样的键盘输入部分的模板代码。

private class TAdapter extends KeyAdapter {

@Override
public void keyPressed(KeyEvent e) {

//Keyboard input part (PROBLEM)

最佳答案

您将需要两组字段。一组描述最近按下的方向键,而另一组描述最近在计时器操作中实现的实际移动方向:

private boolean leftPressed;
private boolean rightPressed;
private boolean upPressed;
private boolean downPressed;

private boolean movingLeft;
private boolean movingRight;
private boolean movingUp;
private boolean movingDown;

正如您所期望的,“Pressed”字段仅由 KeyListener 设置。

然后,计时器操作应读取这些*按下的字段,并相应地设置移动*字段。这允许您的 KeyListener 禁止基于最后实现方向的方向反转,而不仅仅是最后按下的键:

if (key == KeyEvent.LEFT && !movingRight) {
leftPressed = true;
rightPressed = false;
upPressed = false;
downPressed = false;
}

您可能会发现使用枚举比维护一组四个 boolean 值更容易。例如:

private enum Direction { LEFT, RIGHT, UP, DOWN }

private Direction lastKeyPressed;
private Direction movement;

关于Java : Multiple keyboard input during "Timer" period,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37619241/

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