在为类制作游戏时,我无法让我的角色沿对角线移动。我认为我在检测多个按键时做错了,因为我用单个键测试了 walkDownLeft,但当我尝试用左右键触发它时,它只是向左移动。我是否遗漏了某些东西,或者我使用的方式不仅仅是做我想做的事?
public boolean AkeyDown(Event e, int key) {
if (key == 1004) {
Player.walkUp = true;
}
if (key == 1005 && key != 1006) {
Player.walkDown = true;
}
if (key == 1005 && key == 1006) {
Player.walkDownLeft = true;
}
if (key == 1006 && key != 1005) {
Player.walkLeft = true;
}
if (key == 1007) {
Player.walkRight = true;
}
return true;
}
public boolean AkeyUp(Event e, int key) {
if (key == 1004) {
Player.walkUp = false;
}
if (key == 1005 && key != 1006) {
Player.walkDown = false;
}
if (key == 1005 && key == 1006) {
Player.walkDownLeft = false;
}
if (key == 1006 && key != 1005) {
Player.walkLeft = false;
}
if (key == 1007) {
Player.walkRight = false;
}
return true;
}
最佳答案
只是为了扩展 MadProgrammer 的评论。 Java 中有三种类型的按键事件:keyPressed
、keyReleased
和 keyTyped。
keyPressed
和 keyReleased
永远不会检测到多个字符。即使您按下 Ctrl,然后按下 c(就像复制一样),您也会收到两个 keyPressed
事件,一个用于 Ctrl,一个用于 c。
keyTyped
会将多个按键的某些组合合并为一个,并为 Ctrl+c 序列生成一个 keyTyped
事件(C 并按下修饰符 Ctrl)。但是,keyTyped 只会组合修饰键(Ctrl、Alt、Super 等),而不会组合两个箭头键。这意味着如果用户按下向上箭头,然后短暂按下向右箭头,您将收到两个 keyPressed
事件,每个箭头一个。如果他们随后释放了按键,您将收到两个 keyReleased
事件和两个 keyTyped
事件。
这就是为什么你永远不会进入 walkDownLeft 场景的原因。两个按键都触发时不会发生任何事件。我建议只使用 walkLeft、walkRight、walkUp 和 walkDown。然后在读取这些状态的另一个线程中有类似的内容:
if(player.walkUp && !player.walkRight && !player.walkLeft) {
//Move up
} else if (player.walkUp && player.walkRight) {
//Move upRight
} else if (player.walkUp && player.walkLeft) {
//Move upLeft
} //...
这些 if 语句可以优化,但为了便于阅读,我将它们保留原样。
关于java - 需要帮助对角移动角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907081/