2012-12-23 45 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

啊不用擔心,現在完美!感謝您的幫助 :) –