2012-12-23 35 views
0

我有一个for循环,它从数组创建文本字段以表示高分。在我的比赛每个级别都有一个单独的循环来做到这一点(这工作绝对没问题),这里有一个例子:AS3:从循环外删除在for循环中创建的子项

// LEVEL 1 HIGH SCORES // 
if (currentLevel==1) { 
for (var k:int = 0; k < lvl1highScores.length; k++) //loop the length of the lvl 1 score array 
{ 
var tf:HighScoreTF = new HighScoreTF(); 
tf.txt.text = lvl1highScores[k].player + " - " + lvl1highScores[k].score; 
tf.y = k * 35; //sets distance between each high score text field 
addChild(tf); 
} 
} 

我想要做的是从视图中删除所有这些文本字段(TF)的一次用户已经从高分图表中点击。这将从一个单独的函数到创建文本字段的函数完成。

使用removeChild不起作用,因为孩子在游戏最初启动时不会被创建。

所有帮助最受赞赏,谢谢!

回答

2

那么,首先,为每个单独的级别单独使用for循环是非常糟糕的做法,因此您可能需要重新考虑如何执行此操作。但是,如果您真的只想解决现有问题的简单解决方案,则应该为所有对象创建一个容器,然后移除该容器。

var highScoreFields:Sprite = new Sprite(); 
if (currentLevel == 1) { 
    // ... 
    highScoreFields.addChild(tf); 
    // ... 
} 
addChild(highScoreFields); 

然后,您可以取出容器,这将卸下所有的孩子从显示链,简单地通过调用removeChild(highScoreFields)

+0

嗨杰克,谢谢你的回应。我尝试了你的方法,并且现在在试图查看高分时出现以下错误消息:'ArgumentError:Error#2012:DisplayObjectContainer $ class can not be instantiated。'。任何想法如何我可以解决这个问题?我完全按照你的指示,所以不应该是任何问题。干杯! –

+0

@TomHaddad哎呀,对不起。我忘记了'DisplayObjectContainer'是抽象的。尝试使用'Sprite'代替。我相应地更新了我的代码。 –

+0

啊不用担心,现在完美!感谢您的帮助 :) –