Java塔防导弹计算

标签 java math 2d game-physics

我正在尝试开发一个小型 Java 2d 塔防游戏,但我在尝试计算如何发射导弹时遇到了问题。经过数小时的搜索和测试,我更加困惑了。

我目前拥有的是:

  1. 4 种情况,取决于塔所在的位置,取决于它向其开火的单位(NW、NE、SW、SE)
  2. 我需要使用 Math.sqrt(x2, x1, y2, y1) 计算当前目标与导弹发射塔之间的距离。
  3. 缩放导弹的 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 。不过,您的 xBulletyBullet 字段应该是浮点值(例如 double 值),而不是整数。

关于Java塔防导弹计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712919/

相关文章:

java - Integer对象的内存地址

math - 平滑局部吊顶功能

algorithm - 连接点在空间中的位置

C++ for循环二维数组

java - 设置移动和旋转物体上的推力位置

java - 在 DataBaseHelper 类中实现 Parcelable

java - MPAndroidChart 插入 Y 轴 listArray 变量或动态参数

java - AmazonS3异常 : Access Denied

file - 批处理文件基础知识 : Adding a hardcoded integer to a variable in a for loop

java - 如何让这个二维数组向右旋转 90 度?