Actionscript 3 如何移除舞台上的物体?

Actionscript 3 如何移除舞台上的物体?,actionscript-3,flash,Actionscript 3,Flash,我正在做一个游戏,游戏中的敌人排成一排,出现在屏幕上。当用户点击暂停按钮时,他们会进入另一个屏幕(暂停屏幕)。此功能启动: function PauseGame():void { if (gameState == STATE_PLAY_GAME) { Rchannel.stop(); removeEventListener(Event.ENTER_FRAME, gameLoopR); for each(var tempEnemy:

我正在做一个游戏,游戏中的敌人排成一排,出现在屏幕上。当用户点击暂停按钮时,他们会进入另一个屏幕(暂停屏幕)。此功能启动:

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

}

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

无需调用
removeChild
即可移除敌人和你只是在顶部绘制的“旧”关卡(不好!)

你需要为每个敌人调用
removeChild
(即使他们都不可见),并清除你的
敌人列表(假设你遵循传统游戏逻辑,敌人列表中的每个敌人都会被更新)

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

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

*注意:我已经有一段时间没有写任何AS3了,所以语法可能不是100%正确,对不起

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

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

//Add enemies inside container
container.addChild(enemy);
然后,当您需要删除它们时:

removeChild(container);

他们都走了!我认为所有这些的语法都是正确的。如果您愿意,我将让您决定如何最好地实现此功能。

另一种更符合您的代码的方法是:

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

你必须让它们再次可见,对吗?为什么不这么做呢?因为我想把关卡清空。就像重启一样。屏幕上没有上一次播放时的内容。那么为什么不删除它们呢?您添加了child以将它们放在显示列表中,对吗?removeChild删除它们。如果数组中有“敌人”,则建议代码的最后一行应该类似于“敌人[0]。remove();”其中remove是一个针对任何敌人的类的方法。移除方法应该移除敌人内部的任何事件侦听器。您可能需要添加一条线,即在索引0处拼接敌人。然后,当你将新的敌人推到你的阵法上时,你将从一个空阵法开始。