如何为每个孩子可靠地迭代一个MovieClip?
我正在开发一款游戏,一种很好的方式来设置我的关卡是在一个MovieClip中,每一帧都是一个新的关卡。问题是,当我转到第2帧或第3帧并尝试迭代MovieClip的子项时,我得到的数字(少于)实际上在该帧上。
我认为这是因为前一帧的实例正被转移到新帧。
一个简单的解决方案是为每个级别创建一个新的MovieClip而不是每个MovieClip中的新框架,但这不是最具扩展性的解决方案(假设我想删除一个级别或在其他级别之间添加一个级别,等等)。
有什么想法吗?
答案 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实例。