Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将所有敌人推入一个阵型,然后检查与玩家的碰撞_Arrays_Actionscript 3_Flash_Flashdevelop - Fatal编程技术网

Arrays 将所有敌人推入一个阵型,然后检查与玩家的碰撞

Arrays 将所有敌人推入一个阵型,然后检查与玩家的碰撞,arrays,actionscript-3,flash,flashdevelop,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

我所做的是制作一个阵列,然后将两个对象(敌人)推入该阵列

现在,我正在检查该阵列中是否有任何敌人触碰我的玩家

    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

            }
        }
    }
私有函数冲突():void
{
小妖精1=新的小妖精;
小妖精2=新的小妖精;
goblinArray.push(goblin1);
goblinArray.push(goblin2);
//让所有的敌人都进入循环
for(变量i:int=0;i
这在技术上应该是可行的,但我想不出一个解决方案,我非常感谢你的提示

谢谢你花时间

Ps我刚刚记得:玩家击中的任何一个地精,我希望他做if语句中的事情,而不是所有的地精,我想瞄准被击中的地精,并且只击中

对不起,如果我最多也解释不了的话

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

如果它击中了该阵列中的该地精,那么只有该地精在阵列中停止,而其他地精在阵列中移动

无论玩家击中哪一个地精,我希望他按照if语句中的内容来做,而不是所有的地精,我希望瞄准被击中的地精,并且只击中

但你的说法是正确的,你将拥有所需的地精。。。 如果要在第一次碰撞后停止碰撞算法,可以使用
中断或返回

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;
        }

这取决于
goblin.cantMove
goblin.canMove
设定者做什么。如果它们只是布尔值,您只需要一个-
canMove
可以设置为true或false。
我假设在代码的其他地方有一个游戏循环。当你更新你的地精时,如果
canMove
设置为false,它们将被阻止移动。

如果这是你想要的,那么在你的游戏循环代码中,我建议你通过你的小妖精循环并调用他们的
update()
方法。然后,在您的
Goblin
update()
方法中,检查Goblin的
canMove
属性,并且仅当
canMove
为真时才移动它。

对不起,您能否澄清一下您希望实现的目标?有更好或更快的方法来进行碰撞吗?我想你可能需要再次尝试解释你自己,因为我正在努力理解你。顺便说一下,我不认为你需要这两个布尔人。如果goblin.canMove=true,这不是暗示goblin.cantMove=false吗?我已经解决了。谢谢大家。您好,我尝试过类似的方法,但由于命中测试不起作用,所以没有更新。不要把进入框架事件放在你的小妖精里面。运行多线程游戏可能会遇到麻烦。另外,实际上,您将在每一帧添加一个ENTER_FRAME eventListener-您不想这样做。我假设你有一个主要的游戏类,你的小妖精是在这个类中被创建的(它们被放入一个数组中)。如果是这样,请将addEventListener(Event.ENTER_FRAME,gameLoop)放在那里,然后在gameLoop(e:Event)中通过您的小妖精循环,并对每个小妖精调用“update()”。