如何创建将在未来使用的虚拟影片剪辑池?

时间:2013-12-22 21:12:33

标签: actionscript-3 flash

我正在制作一个游戏,将敌人从图书馆产生到舞台上。我希望能够在“虚拟”游泳池中制造20个敌人,而不是产生新的敌人。这些敌人将随机生成,当玩家点击敌人时,他们会死亡并获得回收。

这是我创建敌人的循环代码:

 function makeEnemies():void
{
    var chance:Number = Math.floor(Math.random() * 150);
    if (chance <= level && enemies.length < 4)
    {
        tempEnemy = new Enemy();
        tempEnemy.x = Math.round(Math.random() * 480);
        addChild(tempEnemy);
        tempEnemy.scaleX = 1.5;
        tempEnemy.scaleY = 1.5;
        tempEnemy.cacheAsBitmapMatrix=identityMatrix;
        enemies.push(tempEnemy);

        tempEnemy.speed = enemyBaseSpeed + ((level - 1) * speedLevelInc);
        if (tempEnemy.speed > MAX_SPEED)
        {
            tempEnemy.speed = MAX_SPEED;

        }


    }

}

function moveEnemies():void
{
    var tempEnemy:MovieClip;


    for (var i:int =enemies.length-1; i>=0; i--)
    {
        tempEnemy = enemies[i];
        if (tempEnemy.dead)
        {
            score++;
            score++;
            roachLevel.score_txt.text = String(score);
            enemies.splice(i,1);

        }
        else
        {

            tempEnemy.rotation += (Math.round(Math.random()*.4));
            tempEnemy.y +=  (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
            if (tempEnemy.x < 10)
            {
                tempEnemy.x = 11;
            }
            if (tempEnemy.x > stage.stageWidth - offset)
            {
                tempEnemy.x = stage.stageWidth - offset;
            }
            if (tempEnemy.y > stage.stageHeight)
            {
                removeEnemy(i);

                lives--;
                roachLevel.lives_txt.text = String(lives);
            }
        }
    }
}

我不想使用课程。只是图层内的代码。

1 个答案:

答案 0 :(得分:0)

如果你想“回收”这些敌人,你可以做的是创建一个数组,为了论证,让我们调用这个数组enemyPool,每当玩家杀死一个敌人时,获取它的引用,进行removeChild调用以将其从舞台中删除,然后再次使用该引用,将敌方对象存储到enemyPool数组中。

每当你需要将另一个敌人放回到屏幕上时,只需从enemyPool数组中弹出一个,在你addChild调用之前再次对该对象进行初始化以显示它们屏幕又来了。