将所有敌人推入阵列,然后检查与玩家的碰撞

时间:2014-03-07 14:08:50

标签: arrays actionscript-3 flash flashdevelop

我所做的是做了一个数组,在这之后我把两个物体(敌人)推进了那个数组。

现在我正在检查该阵列中的任何敌人是否触碰我的播放器。

    private function collision():void 
    {

    goblin1 = new Goblin;
    goblin2 = new Goblin;

    goblinArray.push(goblin1);
    goblinArray.push(goblin2);  

    //get all enemies in to the loop    
    for (var i:int = 0; i < goblinArray.length; i++)
        {
            var goblin:Goblin = goblinArray[i]; //datatype goblin to the goblin class 


            if (goblin.hitTestObject(player)) //if anything from that array hits the player then do this
            {
                //make that individual goblin stop

            }
            else
            {
                //make the goblin and other goblins move

            }
        }
    }

这应该在技术上有效,但我想不出解决方案,我非常感谢提示。

感谢您抽出宝贵时间。

Ps我刚刚记得:玩家击中了什么地精,我希望他做if语句中的内容,而不是所有的地精,我想瞄准被击中的妖精,并且只打击。

抱歉,如果我无法解释它充其量。

编辑;我正在尝试完成一个命中测试,其中命中测试测试玩家是否正在击中阵列中的地精。

如果它击中那个妖精,在那个阵列中,那么只有阵列中的那个妖精会停止,而阵列中的其他精灵会移动。

2 个答案:

答案 0 :(得分:0)

  

玩家遇到什么地精,我希望他做if语句中的内容,而不是所有的地精,我想针对被击中的地精,并且只打击。

但是你的陈述是正确的,你将需要那个妖精...... 如果要在第一次碰撞后停止碰撞算法,可以使用break or return;

if (goblin.hitTestObject(player)) //if anything from that array hits the player then do this
        {
            //Do whatever you need
            //Decide what flag you need canMove *or* cantMove ;) 
            goblin.canMove = false;
            break;
        }

答案 1 :(得分:0)

这取决于goblin.cantMovegoblin.canMove制定者所做的事情。如果他们只是布尔人,你只需要一个 - canMove可以设置为真或假 我假设你的代码中有一个游戏循环。当您更新地精时,如果canMove设置为false,则会阻止他们移动 如果这是你想要的,那么在你的游戏循环代码中,我建议你循环你的地精并调用他们的update()方法。然后,在Goblin update()方法中,检查地精的canMove属性,并仅在canMove为真时移动它。