0

我到处搜索并找到了一些编码寻的导弹的资源,但是由于我对动作脚本和一般编码有点陌生,我无法真正理解不同位的作用,更不用说将它们合并到我的游戏中了。

我正在为一个学校项目制作一个滚动射击游戏。有一种特殊的“第三级”武器,其工作原理如下:

  • 当敌人在射程内时,武器会自动开火
  • 武器瞄准最近的敌人并朝它走去
  • 它也是导弹,所以它也需要旋转运动
  • 当目标被摧毁时,导弹将自毁

我已经有了找出最近目标的代码:

for (var i in enemies)
        {
            var min = Infinity; // Set to infinity so the if statement will work

            var tempDist = getDistance(enemies[i]); // tempDist stores the distance

            if (tempDist < min && tempDist < 300)
            {
                min = tempDist;
                closestEnemy = enemies[i];
            }
        }

(getDistance() 是一个函数,用于在我的代码中查找两个 MC 之间的距离)

我想要它做的是让最近的敌人存储标识符,如果附近没有目标,则存储“未定义”。寻的导弹 MC 有一个类应该通过 _root.playership.closestEnemy 不断更新最近敌人的位置。如果它是“未定义的”,它应该会爆炸。

玩家的飞船包含一个名为“enemies”的数组,其中包含所有生成的敌人的所有身份。我的装弹和发射率系统很好用,只是跟踪是问题所在。

任何帮助将不胜感激,谢谢!

4

1 回答 1

1

您需要就您希望“跟踪”如何操作做出一些决定,即:

  • 是否完美(导弹是否立即指向目标,还是需要时间转弯?)
  • 导弹是否有速度限制、加速度或恒定速度?

最简单的方法可能是将导弹的角度调整为它与目标之间的矢量:angle = atan2(target.y-missile.y, target.x-missile.x例如。(如果我的 AS2 语法不正确,请原谅我,已经有一段时间了。)

下一步是推进导弹的位置。如果您已经从上面计算出角度,则只需要使用一些三角函数来分离正交分量:

missile.x += missile.speed * cos(angle);
missile.y += missile.speed * sin(angle);

missile.speed您正在使用导弹和目标之间的向量的 x,y 分量以每帧的恒定速度 ( ) 移动。从那里你可以开始添加加速度之类的东西(包括线速度和角速度)。

希望这会有所帮助。

于 2013-10-24T02:35:46.963 回答