如何将数组堆栈中的影片剪辑放在一起?

时间:2015-07-01 09:53:42

标签: arrays actionscript-3 flash-cs6 hittest

嘿,大家现在已经有一段时间了。所以基本上我正在创建一个游戏,其中对象从舞台顶部落下,一旦玩家捕获一个对象,我希望其他对象能够堆叠在第一个对象之上并继续前进和前进。就像你在彼此堆叠块或其他东西。

我有一个数组,其中我持有每隔一秒钟从舞台顶部落下的影片剪辑。影片剪辑名为acorn,这就是我如何将它设置为舞台上的橡子阵列落下的地方:

    private function addAcorn():void 
    {
        TweenLite.delayedCall(acornNumber, addAcorn);
        var newAcorn = new mcAcorn;
        addChild(newAcorn);
        aAcornArray.push(newAcorn);
    }

在我的输入框架事件监听器中我有checkAcornHitSquirrel();

以下是我设置函数的方法:

private function checkAcornHitSquirrel():void 
    {
        for (var i:int = 0; i < aAcornArray.length; i++)
        {
            var currentAcorn:mcAcorn = aAcornArray[i];


            if (currentAcorn.hitTestObject(squirrel))
            {
                //Have Current Acorn Stack on Squirrel mouth and have mouth expand
                acorn = currentAcorn;
                currentAcorn.addEventListener(Event.ENTER_FRAME, trackAcorn);

                //aAcornArray.splice(i, 1);
                trace("SQUIRREL_ACORN_HIT_TEST");
            }

        }
    }

我有Enter Frame事件trackAcorn所以当玩家移动时,橡子随玩家移动。这是函数:

    private function trackAcorn(e:Event):void 
    {
        acorn.x = squirrel.x;
        acorn.y = squirrel.y - 50;
    }

所以我的主要想法是实现双循环而不是1 for循环。但不确定这是否是最好的方法或如何真正实现它。如果你明白我想要做什么,请帮助我真的很感激。

这就是我尝试的但是只有两个橡子相互堆叠,其他橡子通过:/

private function checkAcornHitSquirrel():void 
    {
        for (var i:int = 0; i < aAcornArray.length; i++)
        {
            var currentAcorn:mcAcorn = aAcornArray[i];

              for (var j:int = 0; j < aAcornArray.length; j++)
              {
                var stackAcorn:mcAcorn = aAcornArray[j];

                if (currentAcorn.hitTestObject(squirrel))
                {
                    //Have Current Acorn Stack on Squirrel mouth and have mouth expand
                    currentAcorn.x = squirrel.x;
                    currentAcorn.y = squirrel.y;
                    currentAcorn.stopAcorn();
                    //aAcornArray.splice(i, 1);
                    trace("SQUIRREL_ACORN_HIT_TEST");
                }

                if (currentAcorn.hitTestObject(stackAcorn) && currentAcorn.hitTestObject(squirrel) )
                {
                    stackAcorn.x = currentAcorn.x;
                    stackAcorn.y = currentAcorn.y - 30;
                }
              }

        }
    }

1 个答案:

答案 0 :(得分:1)

我认为您的问题是acorn中对trackAcorn的引用。此变量不再引用添加eventListener时所执行的相同橡子,因为它在for循环的每次迭代中都会更改。

你可以有一个单独的for循环遍历连接到松鼠的所有橡子。您只需要附加和未附加橡子的单独列表。我猜这是你的意思&#34;双循环&#34;

您还可以创建一个新的Acorn类,其中包含对MovieClip的引用和用于移动它的逻辑。这将更加面向对象,并使更明显的橡树被移动到哪里。