0

所以我一直试图让一个对象根据它使用 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));
}

为什么它只朝四个方向前进?

4

2 回答 2

3

您是否意识到该dir字段在您的代码中永远不会改变。

updateDir无论您调用多少次,方法都会打印相同的内容。

有什么dir = 20用?我想您可能需要重新检查或删除该声明。

于 2013-08-09T23:45:26.880 回答
1

@Nishant Shreshth说的是真的。但是使用浮点数(比如floator double)而不是int你的dir,xy变量也是非常重要的。否则你的dir值的小数部分可能会被截断,这在你使用弧度和三角函数时是一个很大的问题。

另请注意,您可能希望使用Math.atan2(spdY, spdX)而不是您使用的默认 atan 方法。一旦为零,您的方法就会失败spdX:您将除以零。atan2将处理这些边缘情况。Wikipedia提供了有关此功能的详细信息。

于 2013-08-10T00:07:34.833 回答