【发布时间】:2019-03-29 14:57:01
【问题描述】:
位置沿 x 和 z 轴很好地更新。但是当我转动它时它停止工作;
我尝试重新编写结构,但没有成功。
private static final float RUN_SPEED = 20;
private static final float TURN_SPEED = 20;
private float currentSpeed = 0;
private float currentSidewaysSpeed = 0;
private float currentTurnSpeed = 0;
public void checkInputs(){
if(Keyboard.isKeyDown(Keyboard.KEY_W)) {
this.currentSpeed = -(RUN_SPEED);
}else if(Keyboard.isKeyDown(Keyboard.KEY_S)) {
this.currentSpeed = RUN_SPEED/2;
}else{
this.currentSpeed = 0;
}
if(Keyboard.isKeyDown(Keyboard.KEY_D)){
this.currentTurnSpeed = -TURN_SPEED;
}else if(Keyboard.isKeyDown(Keyboard.KEY_A)){
this.currentTurnSpeed = TURN_SPEED;
}else{
this.currentTurnSpeed = 0;
}
}
public void move(){
checkInputs();
float xDistance = currentSpeed * MainGameHandler.getFrameTimeSeconds();
float zDistance = currentTurnSpeed * MainGameHandler.getFrameTimeSeconds();
float distance = xDistance + zDistance;
float dx = (float) (xDistance * Math.sin(Math.toRadians(-getRotY())));
float dz = (float) (zDistance * Math.sin(Math.toRadians(-getRotY())));
System.out.println(dx + " " + dz);
increasePosition(dx, 0, dz);
}
假设是在任何方向上工作。我 99.9% 确信我遗漏了一两行代码。提前感谢您的帮助
【问题讨论】:
-
想想吧。当你旋转 0°,即 getRotY() 为 0 时,sin(0°) 会是什么?是的,0。这意味着 dx 和 dz 都将为 0,您将无法移动到任何地方。只有当您旋转 90° 或 270° 时,您才能全速移动。您需要将一个 sin() 更改为 cos(),这样当您旋转时一个分量减小,另一个分量会增大。
-
你推荐哪一个?? ??????