物体不会根据给定的角度移动?

时间:2013-08-09 23:43:11

标签: java angle degrees radians

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

为什么它只有四个方向?

2 个答案:

答案 0 :(得分:3)

您是否意识到代码中dir字段永远不会发生变化。

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

dir = 20的内容是什么?我想你可能需要重新检查或删除那个陈述。

答案 1 :(得分:1)

@Nishant Shreshth 所说的是真的。但对于floatdoubleint使用浮点(例如dirx)而不是y也非常重要变量。否则,dir值的小数部分可能会被截断,这在使用弧度和三角函数时几乎是个问题。

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