从场景中仅删除对象的一组实例

时间:2012-04-11 14:49:56

标签: actionscript-3 flash-cs5

我在ActionScript 3中遇到一个问题,我想在一个项目中输出一堆数据并作为纯文本。但这不是问题所在。问题是当用户更改他想要显示的数据类型时。然后,我将删除图中当前显示的列,并添加新列。但我的代码删除了所有列,因此根本没有图表!

我在Flash CS5中完成了所有操作,列是我制作的对象(矩形)的实例,我只是添加到舞台上。所有实例都被添加到容器“容器”中。当我想删除它们,并添加我使用的新的:

var container = new Sprite(); // The container for my diagram
function emptyContainer() {
if (container.numChildren > 0) {
    container.removeChildAt(0); 
  }
}

哪个有效。

我有switch语句,根据用户输入添加不同的列。对象的名称(矩形)是“soyle”。实例的名称是“stolpe” (顺便说一句,我是挪威语,这就是那些奇怪的话语)

  function fChange(event:Event) {
textToBeReturned = ""; 

  switch (treCbox.selectedItem.label) {
case "Furu":
    for (var a = 1; a < table.length; a++ ){
        textToBeReturned += "I år: " + table[a][0] + " - " + table[a][1] + " millioner trær." + "\n";
        // Diagram
        var stolpe = new soyle;
        stolpe.width = table[a][1];
        stolpe.x = 20;
        stolpe.y = 100 + (a * 30);
        container.addChild(stolpe);

        // Description for the columns
        var textbox = new TextField;
        textbox.text = "År " + table[a][0];
        textbox.x = stolpe.width + 30;
        textbox.y = stolpe.y;
        container.addChild(textbox);
    }
    break;
case "Gran":
    for (var b = 1; b < table.length; b++ ){
        textToBeReturned += "I år: " + table[b][0] + " - " + table[b][2] + " millioner trær." + "\n" ;

        var stolpe = new soyle;
        stolpe.width = table[b][1];
        stolpe.x = 20;
        stolpe.y = 100 + (b * 30);
        container.addChild(stolpe);

        // Description for the columns
        var textbox = new TextField;
        textbox.text = "År " + table[b][0];
        textbox.x = stolpe.width + 30;
        textbox.y = stolpe.y;
        container.addChild(textbox);
    }
    break;
case "Lauvtre":
    for (var c = 1; c < table.length; c++ ){
        textToBeReturned += "I år: " + table[c][0] + " - " + table[c][3] + " millioner trær." + "\n" ;

        var stolpe = new soyle;
        stolpe.width = table[c][1];
        stolpe.x = 20;
        stolpe.y = 100 + (c * 30);
        container.addChild(stolpe);

        // Description for the columns
        var textbox = new TextField;
        textbox.text = "År " + table[c][0];
        textbox.x = stolpe.width + 30;
        textbox.y = stolpe.y;
        container.addChild(textbox);
    }
    break;
}   
txtReturn.text = textToBeReturned; 
};

我想知道在哪里放置我的功能来移除所有孩子,只删除那些之前添加的孩子。至于我放置函数的位置(在fChange开始时,在每个案例的开头),没有显示新图表或旧图表。

当然有数据的数组,但我不发布,因为它是无关紧要的。

感谢您的时间,并提前为您提供帮助! :)

1 个答案:

答案 0 :(得分:2)

这里有几个问题。我假设您要在交换机中添加新子项之前从容器MC中删除所有子项。 (下次提示,尝试只发布你正在使用的代码。这里的switch语句很大而且势不可挡。它也不是真的相关)

你的函数emptyContainer实际上并不删除所有子节点,它只删除索引0处的一个。这需要在循环内部。

function emptyContainer() {
   while (container.numChildren > 0) { //changed the if to a while. This will run until there are no children left in container
      container.removeChildAt(0); 
  }
}

你想要在你的fChanged函数中调用第一个东西

function fChange(event:Event) {
     emptyContainer()

  /* rest of function */

}

尝试一下,让我知道它是如何工作的。