gpt4 book ai didi

java - 如何获取onKeyPressed持续时间?

转载 作者:行者123 更新时间:2023-12-02 09:32:32 26 4
gpt4 key购买 nike

我正在尝试创建一个蛇游戏,我使用箭头键或 WASD 来移动蛇。最初,蛇很慢并且以 2 fps 的速度移动(就像经典的蛇游戏一样),我希望当我按住其中一个键时蛇移动得更快,并在释放它时将其设置为原始速度。

我尝试像这样更改 onKeyPressed 内的移动速率:

scene.setOnKeyPressed(event -> {input = event.getCode().toString();
for (String acceptedKey : acceptedKeys) {
if (event.getCode().toString().contains(acceptedKey)) {
movement.setRate(4);
break;
}
}
});

然后当我释放它时将其更改为正常速率:

scene.setOnKeyReleased(event -> movement.setRate(1));

*运动是一条时间线,从游戏开始开始直到蛇停止或死亡。

代码按我的预期工作,但是每次我按下一个键,它就会加速一个周期,然后减慢速度。我希望只有当我按住某个键一段时间(比如 400 毫秒)时速度才会改变,所以有没有办法可以放置一个 if 语句来检查 onKeypressed() 的持续时间?

最佳答案

不要在监听器中处理这个复杂的逻辑,而是设置一个 boolean 标志,当按下一个键时该标志会被翻转。

scene.setOnKeyPressed(event -> {input = event.getCode().toString();
for (String acceptedKey : acceptedKeys) {
if (event.getCode().toString().contains(acceptedKey)) {
acceptedKeyBeingPressed = true;
break;
}
}
});
scene.setOnKeyReleased(event -> acceptedKeyBeingPressed = false);
<小时/>

然后,当标志 acceptedKeyPressedtrue 时,使用某种 numTicksHeld 变量来跟踪时间。

检查每次tick时acceptedKeyPressed是否为true。当 acceptedKeyPressedfalse 时,将 numTicksHeld 变量重置为 0。如果为true,则加一。如果 numTicksHeld 高于某个阈值,则 movement.setRate(4)

我不知道你的框架中的勾选/更新方法是什么样的,但它会是这样的:

public void tick() {
if(acceptedKeyPressed) {
numTicksHeld++;
if(numTicksHeld > KEY_HELD_THRESHOLD)
movement.setRate(4)
} else {
numTicksHeld = 0;
movement.setRate(1)
}
}

关于java - 如何获取onKeyPressed持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835290/

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