我正在制作一个阵列中的敌人游戏。当用户点击暂停按钮时,他们将被带到不同的屏幕(暂停屏幕)。此功能启动:
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);
}
如何在不妨碍游戏设置的情况下移除屏幕上的敌人?
答案 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 = [];