所以我一直试图根据它使用atan()创建的两种速度来移动对象。 但是每次测试都会导致直线上升。
因此我决定将其取出并用输入的角度替换它,奇怪的是只适用于四个角度90 180 270 0。
我不确定为什么它只适用于那些方向,这是我的代码:
public void update() {
updateDir();
move();
}
public void updateDir(){
dir = Math.atan(spdY/spdX);
dir =20; //I know this is here it was used to test if it will actually change
dir = dir * Math.PI / 180.0;
System.out.println("dir: " + dir);
}
public void move() {
x += (spd*Math.cos(dir));
y -= (spd * Math.sin(dir));
}
为什么它只有四个方向?
答案 0 :(得分:3)
您是否意识到代码中dir
字段永远不会发生变化。
方法updateDir
打印相同的内容,无论您调用它多少次。
dir = 20
的内容是什么?我想你可能需要重新检查或删除那个陈述。
答案 1 :(得分:1)
@Nishant Shreshth 所说的是真的。但对于float
,double
和int
使用浮点(例如dir
或x
)而不是y
也非常重要变量。否则,dir
值的小数部分可能会被截断,这在使用弧度和三角函数时几乎是个问题。
另请注意,您可能希望使用Math.atan2(spdY, spdX)
而不是您使用的默认atan方法。一旦spdX
变为零,您的方法就会失败:您将除以零。 atan2
会处理这些边缘情况。 Wikipedia提供了有关此功能的详细信息。