【问题标题】:AS3: Removing child that is created within a for loop from outside of the loopAS3:从循环外部删除在 for 循环中创建的子项
【发布时间】:2012-12-23 17:54:00
【问题描述】:

我有一个 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 不起作用,因为在游戏最初开始时不会创建孩子。

非常感谢所有帮助,谢谢!

【问题讨论】:

    标签: actionscript-3 function loops textfield


    【解决方案1】:

    嗯,首先,为每个级别设置一个单独的for 循环是一种糟糕的做法,因此您可能需要重新考虑如何执行此操作。但是,如果您真的只是想简单地解决现有问题,您应该为所有对象创建一个容器,然后删除该容器。

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

    然后您可以移除容器,这会将其所有子项从显示链中分离出来,只需调用removeChild(highScoreFields)

    【讨论】:

    • 嗨,杰克,感谢您的回复。我尝试了您的方法,现在在尝试查看高分时收到以下错误消息:“ArgumentError:错误 #2012:无法实例化 DisplayObjectContainer$ 类。”。知道如何解决这个问题吗?我完全按照您的指示进行操作,所以应该没有任何问题。干杯!
    • @TomHaddad 哎呀,对不起。我忘了DisplayObjectContainer 是抽象的。尝试改用Sprite。我已经相应地更新了我的代码。
    • 不用担心,现在完美运行!谢谢你的帮助:)
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多