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

到目前为止,我有:

  • 根据发射的单位(西北,东北,西南,东南),根据塔的位置分为4种情况
  • 我需要使用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 。不过,您的xBulletyBullet字段应为浮点值(例如, double ),而不是整数。

    09-03 19:48