如何在舞台上删除对象?

时间:2013-11-19 01:14:00

标签: actionscript-3 flash

我正在制作一个阵列中的敌人游戏。当用户点击暂停按钮时,他们将被带到不同的屏幕(暂停屏幕)。此功能启动:

function PauseGame():void
{

    if (gameState == STATE_PLAY_GAME)
    {
        Rchannel.stop();
        removeEventListener(Event.ENTER_FRAME, gameLoopR);
        for each(var tempEnemy:MovieClip in enemies)
        {
         tempEnemy.visible = false;
        }
}
}

它冻结敌人并隐藏它们。还有一个重启按钮。如果用户点击重启按钮,舞台上的敌人就不在场,但他们无形地移动以减少玩家的健康状况。这是重启功能:

function resetRclick(event:MouseEvent):void
{
    Rchannel = rSound.play(0,9999);
    score = 0
    roachLevel.score_txt.text = String(score);
    lives = 3
    roachLevel.lives_txt.text = String(lives);
    level = 1
    roachLevel.level_txt.text = String(level);
    roachLevel.gotoAndPlay(1);
    roachLevel.visible = true;
    Menu_mc.visible = false;
    addEventListener(Event.ENTER_FRAME, gameLoopR);

}

如何在不妨碍游戏设置的情况下移除屏幕上的敌人?

3 个答案:

答案 0 :(得分:0)

没有为敌人和“旧”级别调用removeChild,你只是在顶部(不好!)。

你想为每个敌人打电话removeChild(即使他们都不可见)并清除你的enemies列表(假设你遵循传统的游戏逻辑,每个敌人在敌人名单中更新)。

如果您将所有敌人添加到roachLevel movieclip,您的代码将类似于:

while(enemies.length > 0)
{
    roachLevel.removeChild(enemies[0])
    enemies.splice(0,1);
}

*注意:我暂时没有编写任何AS3,因此语法可能不是100%正确,抱歉。

答案 1 :(得分:0)

删除这些孩子的另一个解决方案是将它们放在movieclip容器中。例如:

var container:MovieClip;
container = new MovieClip();
addChild(container);

//Add enemies inside container
container.addChild(enemy);

然后当你需要删除它们时:

removeChild(container);

他们都走了!我认为所有这些语法都是正确的。如果您愿意,我会由您决定如何最好地实施此项目。

答案 2 :(得分:0)

与您的代码更匹配的另一种方式是:

for each(var tempEnemy:MovieClip in enemies)
{
    tempEnemy.visible = false;
    removeChild(tempEnemy);
}
enemies = [];