as3敌人在一个数组中互相测试



我在测试游戏中进展缓慢,我已经达到可以通过数组在舞台上添加敌人的地步,它们会跟随玩家并朝着玩家旋转而不会出现任何问题。我的下一个任务是赋予每个敌人彼此碰撞检测,否则它们最终会完全重叠,这是不太现实的。

这是我到目前为止关于敌人的代码:

public function initEnemy():void
        {
            enemyArray = new Array();
            for (var i = 0; i < 2; i++)
            {
                var enemy:Enemy = new Enemy((Math.random() *500 + 20), (Math.random() * 200 + 50));
                stage.addChild(enemy);
                enemyArray.push(enemy);
            }

        }
        public function enemyBehavior():void
        {
            var enemyRotation:int;
            for (var i:int = 0; i < enemyArray.length; i++)
            {
                var enemy = enemyArray[i];
                var dx:int = enemy.x - player.x;
                var dy:int = enemy.y - player.y;
                var dr:int = dx * dx + dy * dy;
                var dr2:int = Math.sqrt(dr);
                enemy.x -= enemySpeed * dx / dr2;
                enemy.y -= enemySpeed * dy / dr2;
                enemyRotation = -(Math.atan2(enemy.x - player.x, enemy.y - player.y) * 180 / Math.PI);
                trace(enemyRotation);
                enemy.rotation = enemyRotation;
                if (enemy.hitTestObject(enemyArray[i+1]))
                {
                    enemy.x -= -enemySpeed;
                    enemy.y -= -enemySpeed;
                }

所以这就是我被困住的地方。对着敌人。hitTestObject部分,我最初只是让敌人hitTesting敌人,但这会导致敌人击中测试本身,并完全搞砸了移动和旋转。所以我尝试了上述方法,即使用数组下一个位置的敌人实例来测试每个敌人实例,它适用于大多数敌人,但不是所有敌人,并产生一个错误,因为数组中的最后一个实例将尝试测试一个不存在的实例,这将导致性能大幅下降。

有人能给我一些方向上一个更好的方式来击中测试这些对象从数组,更性能友好?

为了消除错误,i应该小于(enemyArray)。长度- 1),但逻辑仍然是错误的,因为它没有检查所有敌人之间的碰撞。要检查所有敌人之间的碰撞,你应该这样做:

for (var i:int = 0; i < enemyArray.length - 1; i++) {
   var enemy1 = enemyArray[i];
   for(var j:int = i+1; j< enemyArray.length; j++) {
      var enemy2 = enemyArray[j];
      if(enemy1.hitTestObject(enemy2)){
            //do something on collision
      }
   }
}

如果你想要一些高性能的东西,特别是当你有很多敌人时,你应该比较敌人的坐标,看看它们是否重叠。您可以在这里阅读更多关于多个对象碰撞的信息:http://www.emanueleferonato.com/2008/06/07/managing-multiple-balls-collisions-with-flash-as3-version/

最新更新