我正在尝试开发一个小型的Java 2D塔防游戏,但是在计算如何制造导弹时遇到了问题。经过数小时的搜索和测试,我感到更加困惑。
到目前为止,我有:
Math.sqrt(x2, x1, y2, y1)
计算当前目标与导弹从其发射的塔之间的距离。 现在我遇到的问题是如何按比例将导弹的增量x和y对准目标,因此这似乎是现实的。数学不是我的强项,它在这里显示。下面显示了塔中SE象限所具有的功能。
public int distanceX, distanceY;
public double sep, scale;
if(xBullet < Screen.mobs[shotMob].x && yBullet < Screen.mobs[shotMob].y){
distanceX = Screen.mobs[shotMob].x- xBullet;
distanceY = Screen.mobs[shotMob].y - yBullet;
sep = Math.sqrt( (distanceX * distanceX) + (distanceY * distanceY));
scale = // This is the part I am confused about.
xBullet += distanceX * scale;
yBullet += distanceY * scale;
最佳答案
如果要固定速度,只需使用:
scale = someConstant;
要移动子弹,可以使用已经找到的方向 vector ,但是必须通过除以距离来对其进行归一化:
xBullet += (distanceX / sep) * scale;
yBullet += (distanceY / sep) * scale;
基本上,您将获得具有想要的方向的速度单位 vector ,然后将其乘以速度即可得到实际的速度 vector 。不过,您的
xBullet
和yBullet
字段应为浮点值(例如, double ),而不是整数。