我花了很长时间试图找出如何根据角度移动子弹(以度为单位)
我将弧度定义为:
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);
答案 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
坐标的意义。