标题所说的内容。有可能吗?
据我所知,没有getKeyPressed
或类似的东西。我想使用开关盒进行组织(和练习)以及速度(或者我被告知)。
基本上,switch case子句(?)只是一个布尔返回。但是如何在没有面食if / else语句的情况下根据传入的值检查是否按下某个键?
显然这段代码不起作用,但我正在寻找类似的东西。
public void moveCamera() {
switch (Keyboard.isKeyDown(!!!CASE CHECKING HERE!!!)) {
case Keyboard.KEY_W:
position.z -= MOVE_SPEED;
break;
case Keyboard.KEY_A:
position.x += MOVE_SPEED;
break;
case Keyboard.KEY_S:
position.z -= MOVE_SPEED;
break;
case Keyboard.KEY_D:
position.x += MOVE_SPEED;
break;
}
}
答案 0 :(得分:0)
以下是 @KysonTyner 我喜欢(但未尝试过)的解决方案。
您可以启用
getEventKey()
。这将触及您当前的情况,然后您可以使用(getEventKeyState()) {switch/case}
包装整个switch语句。无需使用事件侦听器。 - Kylon Tyner
至于我使用的是什么,我完全抛弃了开关的想法,因为我意识到如果有多个输入方向,移动速度会倍增。
我想支持对角线移动的多个运动方向,因此按下按键时不会出现“重影”。
我所做的是将功能分开,一个用于测试键盘输入,一个用于移动相机。键输入没有任何特殊逻辑,因为它只是将LWJGL Vector3f
传递给相机移动功能。
然后,在相机移动中,我对该矢量进行了标准化并相应地改变了位置。
这是我的Camera类的简化版本,用于演示。除了翻译,我删除了所有内容。
package spikespaz.engine.main;
import org.lwjgl.input.Keyboard;
import org.lwjgl.util.vector.Vector3f;
// Created by spike on 7/3/2017.
public final class Camera {
private Camera() {}
private float moveSpeed = 0.2f;
private Vector3f position = new Vector3f(0, 0, 0);
public Camera(Vector3f position, Vector3f rotation) {
this.position = position;
}
public void updateKeyInput() {
Vector3f direction = new Vector3f(0, 0, 0);
if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
direction.x = 1;
} else if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
direction.x = -1;
}
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
direction.y = -1;
} else if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
direction.y = 1;
}
if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
direction.z = 1;
} else if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
direction.z = -1;
}
translate(direction);
}
private void translate(Vector3f direction) {
Vector3f normalized = direction.normalise(null);
Vector3f.add(position, (Vector3f) normalized.scale(moveSpeed), position);
}
public float getMoveSpeed() {
return moveSpeed;
}
public void setMoveSpeed(float moveSpeed) {
this.moveSpeed = moveSpeed;
}
}
翻译是相对的。在完整的课程中,我有另一个设置绝对位置的功能,没有移动速度。
在上面的例子中,用于翻译的输入向量只是一个方向。该功能应根据每帧的移动速度进行协调。