我需要计算子弹的X和Y速度(子弹将每次移动"更新"由这些),所以我有以下
public int[] getXandYSpeed(int pointOfOriginX, int pointOfOriginY, int aimToX, int aimToY){
int[] coords = new int[2];
aimToX = aimToX - pointOfOriginX;
aimToY = aimToY - pointOfOriginY;
while((aimToX + aimToY) > 5){
aimToX = aimToX/2;
aimToY = aimToY/2;
}
coords[0] = aimToX;
coords[1] = aimToY;
return coords;
但是,这不是真正的准确和子弹有随机速度(如果最终循环中的最终是aimToX加AimToY等于6所以(每个是3)所以最终速度将是x = 1和y = 1,如果最终循环等于四,它将像x = 2和y = 2那样结束,这就是差异)
所以,问题是,如何让它变得更好?
答案 0 :(得分:1)
如果您希望子弹以任何角度以恒定速度行进,您真的想要更像这样的东西。关于使用来自@JSlain的double的评论也是有用的,即使你在绘制/渲染子弹时必须对数值进行四舍五入,它们也会更准确
public double[] getSpeed(int sx, int sy, int ex, int ey)
{
double dx = ex - sx;
double dy = ey - sy;
double theta = Math.atan2(dy, dx); //get the angle your bullet will travel
int bulletSpeed = 5; //how fast your bullet can go.
double[] speeds = new double[2];
speeds[0] = Math.cos(theta) * bulletSpeed;
speeds[1] = Math.sin(theta) * bulletSpeed;
return speeds;
}