从舞台上删除精灵

时间:2010-09-19 19:46:48

标签: flash actionscript-3 parent-child sprite

嘿伙计们,我的页面出现了问题。所以我创建了5个页面,每个页面包含几个影片剪辑(文本,图形,表格等)。但是有一个特定页面包含自动生成的内容。精灵。如果我碰巧落在这个页面上,精灵会出现,但是当我转换到另一个页面时,它们仍然存在,除了非精灵的东西(消失)。我在这个上扯掉我的头发,我设法让一些精灵去除,但有些仍在出现。下面显示了未被删除的布局;

var container:Sprite = new Sprite();

//loop places several "item" in this container sprite and a scroll bar
var item:myItem = new myItem();
var sb:customScrollBar = new customScrollBar();

container.addChild(item);
container.addChild(sb);

所以我们现在在这个页面上生成容器和项目,然后单击一个按钮移动以说出主页,容器仍然停留在那里。

这是我试过的:

removeChild(container); //nothing, this was called from another keyframe where the container was not generated from
stage.removeChild(container); //nothing

以下是错误。 ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。

注* 我也有几个按钮也不是像下面那样生成在容器内部,当我运行removeChild(button1)时它们工作,所以我不知道为什么容器一个不工作。

FLA(cs4) http://www.4shared.com/file/2swJjnNm/mevame.html

预览 http://bodog-bonuses.com/mevame/

3 个答案:

答案 0 :(得分:1)

如果您遵循

,您将不会收到参数错误2025
//initialization
var container:Sprite = new Sprite();

...... 
......
addChild(container);

//------- later
if(contains(container))
  removeChild(container);

无需创建名称,这是保证将sprite或DisplayObject添加到DisplayList中。那么你不会得到一个y ArgumentError 2025。

答案 1 :(得分:0)

类似的事发生在我之前,我通过以下方式解决了这个问题。这取决于我创建的容器实例的方式,因此也被父级识别。

var container:Sprite = new Sprite();
container.name = "container";

//------- later
var child:DisplayObject = getChildByName("container");
removeChild(child);

如果你需要删除所有孩子,你也可以这样做

while( this.numChildrem > 0 )
     this.removeChildAt(0);

答案 2 :(得分:0)

这可能是由于这样一个事实,即对于时间轴动画,任何给定的关键帧都可能包含一个对象,但是对于每个关键帧操作列表,您将失去先前关键帧内容的范围。因此,如果在跨越新的时间轴关键帧之前调用remove child,则可能能够成功调用容器上的removeChild。

否则,您可以利用Patrick的建议,它肯定会在舞台上找到对象并将其删除,尽管它是从显示列表中检索对象的效率较低的方法之一。