子弹没有正确的旅行方式?

时间:2013-06-17 02:57:11

标签: java trigonometry

我花了很长时间试图找出如何根据角度移动子弹(以度为单位)

我将弧度定义为:

public static double toRadians(int angle) {
        return (90.0 - angle) * (Math.PI / 180);
    }

这是我实际移动子弹的代码。 xMov和yMov可以是负数,并且每次打勾都会添加到当前位置。

我从来没有真正使用过Radians,但发现上面的代码是0北,90东等,这就是我想要的。我只是想不通为什么子弹不会改正方向。似乎X是正确的,但Y不是。

double x= Math.cos(Utilities.toRadians(mvmtAngle));
double y= Math.sin(Utilities.toRadians(mvmtAngle));
xMov += x* 4;
yMov += y* 4;

谢谢! - 提示

编辑:学位设置正常(来自输入)

编辑2: 渲染代码:

((Graphics2D)g).rotate(Utilities.toRadians(barrelAngle), xStart, yStart);
g.fillRect(xStart - 1, yStart, 2, BARREL_SIZE);
((Graphics2D)g).rotate(-(Utilities.toRadians(barrelAngle)), xStart, yStart);

1 个答案:

答案 0 :(得分:1)

问题可能是屏幕上的+ y方向下降,而我怀疑你想要+ y上升。您的toRadians函数将0度转换为PI / 2弧度,这在屏幕上会下降。请尝试使用此转换:

public static double toRadians(int angle) {
    return (angle - 90.0) * (Math.PI / 180);
}

这只是反转了角度的符号。由于Math.cos是偶数函数,因此它不会影响计算的x坐标,但会反转y坐标的意义。