cjr*_*cjr 6 java math 2d game-physics
我正在尝试开发一个小的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;
Run Code Online (Sandbox Code Playgroud)
现在我遇到的问题是如何将导弹的 x 和 y 增量缩放到目标,使其看起来更现实。
这需要有多现实?
我不是导弹专家,但我猜想一旦发射简单的导弹就可以用固定的方向和速度来近似。然后他们会继续朝那个方向前进,直到撞到什么东西、耗尽燃料或重力将他们击落。当导弹发射时,您可以存储其方向和速度,并在每一步将导弹移动适当的恒定距离(您可以使用三角公式转换为 x 和 y 坐标)。
double delta_distance = speed * delta_time;
double delta_x = Math.cos(angle) * delta_distance;
double delta_y = Math.sin(angle) * delta_distance;
Run Code Online (Sandbox Code Playgroud)
正如评论中指出的,您可以选择使用速度矢量,而不是单独存储角度和速度。
小提示:出于多种原因,恒定速度只是近似值。当导弹第一次发射时,它必须加速,直到推进力等于空气阻力的阻力。此外,当燃料燃烧时,由于具有相同的力但质量更小,它们实际上可能能够行驶得更快。但对于塔防游戏来说,这种细节程度并不是必需的。恒定速度是合理的简化。
如果您的目标可能快速移动并改变方向,我认为该算法不太适合您,因为导弹经常会错过目标。
更先进的热寻导弹将能够锁定目标并跟踪它。他们需要能够在目标移动时改变方向,但我猜他们可能不会调整速度。由于物理限制,它们改变方向的速度也会受到限制,因此您可能也想对其进行建模。否则,你可能会让导弹飞过目标,然后突然翻转并立即朝相反方向飞行,而不首先减速或转弯 - 这是不太现实的。
先进的导弹可能会尝试根据目标当前的速度来预测目标的移动方向。他们将计算一条路径,使目标的当前轨迹与计算出的导弹轨迹相碰撞。如果目标的运动发生变化,则必须更新此计算。显然,这实施起来有点困难,但请记住,你的玩家想要享受爆破怪物的乐趣。如果所有的导弹都没有击中目标,他们就不会玩得很开心了。因此,做一些额外的工作来确保你的导弹既真实又有效,将使你的游戏变得更好。
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |