为孩子解析一个MovieClip?

时间:2010-11-09 18:44:57

标签: flash actionscript-3 adobe

如何为每个孩子可靠地迭代一个MovieClip?

我正在开发一款游戏,一种很好的方式来设置我的关卡是在一个MovieClip中,每一帧都是一个新的关卡。问题是,当我转到第2帧或第3帧并尝试迭代MovieClip的子项时,我得到的数字(少于)实际上在该帧上。

我认为这是因为前一帧的实例正被转移到新帧。

一个简单的解决方案是为每个级别创建一个新的MovieClip而不是每个MovieClip中的新框架,但这不是最具扩展性的解决方案(假设我想删除一个级别或在其他级别之间添加一个级别,等等)。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

在家尝试,工作:

var mc : $TestMovie2 = new $TestMovie2();
addChild(mc);
mc.addEventListener(Event.ADDED, function(e : Event) : void {
    trace("add to mc :",e.target,e.target["name"]);
});
mc.addEventListener(Event.REMOVED, function(e : Event) : void {
    trace("remove from mc :",e.target,e.target["name"]);
});         
mc.stop();
mc.gotoAndStop(2);
trace("frame 2 numChildren: ",mc.numChildren);
var i : int = mc.numChildren;
while (i--) {
    trace(mc.getChildAt(i).name);
}
mc.gotoAndStop(3);
trace("frame 3 numChildren: ",mc.numChildren);
i = mc.numChildren;
while (i--) {
    trace(mc.getChildAt(i).name);
}

// output :
// add to mc : [object $TestMovie3] $child_1_frame2
// add to mc : [object $TestMovie3] $child_3_frame2
// add to mc : [object $TestMovie3] $child_2_frame2
// frame 2 numChildren:  3
// $child_2_frame2
// $child_3_frame2
// $child_1_frame2
// remove from mc : [object $TestMovie3] $child_1_frame2
// remove from mc : [object $TestMovie3] $child_3_frame2
// remove from mc : [object $TestMovie3] $child_2_frame2
// add to mc : [object $TestMovie3] $child_1_frame3
// add to mc : [object $TestMovie3] $child_2_frame3
// add to mc : [object $TestMovie3] $child_3_frame3
// add to mc : [object $TestMovie3] $child_4_frame3
// add to mc : [object $TestMovie3] $child_5_frame3
// frame 3 numChildren:  5
// $child_5_frame3
// $child_4_frame3
// $child_3_frame3
// $child_2_frame3
// $child_1_frame3

$ TestMovie2 是Flash IDE库中的MovieClip,包含: 第1帧:没有 第2帧:3 $ TestMovie3 MovieClip 第3帧:5 $ TestMovie3 MovieClip

答案 1 :(得分:0)

您可以遍历当前帧的所有子项,然后将其删除,然后转到下一帧。

答案 2 :(得分:0)

为什么不使用Document类,以及游戏的特定类。只需将fla用于图形资产即可。

这样,您将不依赖于帧,并且您可以完全控制每个级别的MovieClips实例。