我正在尝试开发一个小型 Java 2d 塔防游戏,但我在尝试计算如何发射导弹时遇到了问题。经过数小时的搜索和测试,我更加困惑了。
我目前拥有的是:
- 4 种情况,取决于塔所在的位置,取决于它向其开火的单位(NW、NE、SW、SE)
- 我需要使用
Math.sqrt(x2, x1, y2, y1)
计算当前目标与导弹发射塔之间的距离。 - 缩放导弹的 x 和 y。
现在我遇到的问题是如何缩放导弹朝向目标的递增 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 值),而不是整数。
关于Java塔防导弹计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712919/