0

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

我将弧度定义为:

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);
4

1 回答 1

1

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

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

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

于 2013-06-17T03:03:39.927 回答