转自:http://www.lite3.cn/?p=351 

如果一个MovieClip goto到非当前帧,那么直接获取在那一桢的非Shape显示对象是获取不到的, 
但是currentFrame会立即跟进到 指定帧, 但指定帧还未渲染完成, 所以非Shape获取不到的 
Shape元件简单很快就渲染完成了, SimpleButton, MovieClip 却需要更多的时间 
废话不多说了,上代码, 注释比较详细 :razz: package 



        import flash.display.DisplayObject; 

        import flash.display.DisplayObjectContainer; 

        import flash.display.Loader; 

        import flash.display.MovieClip; 

        import flash.display.Sprite; 

        import flash.events.Event; 

        import flash.net.URLRequest; 

        /** 

         * ... 

         * @author lite3 

         */ 

        public class MCgetChildTest extends Sprite 

        { 

                private const url:String = "http://www.lite3.cn/assets/swf/mc_getchild_test.swf"; 

                private var loader:Loader = new Loader(); 

                public function MCgetChildTest() 

                { 

                        loader.load(new URLRequest(url)); 

                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler) 

                } 

                private function completeHandler(e:Event):void 

                { 

                        loader.removeEventListener(Event.COMPLETE, completeHandler); 

                        trace("------------- 主时间轴 -----------------"); 

                        // 获取当前时间轴里mc是子对象 

                        var mc:MovieClip = (loader.content as DisplayObjectContainer).getChildAt(0) as MovieClip; 

                        trace("第一个显示对象:", mc); 

                        trace("跳转到第3帧!"); 

                        mc.gotoAndStop(3); 

                        // 如果是MovieClip就是null, shape就有shape实例 

                        trace("马上测试子对象个数:", mc.numChildren, ",第1个显示对象:", mc.getChildAt(0));// 1  null 

                        trace("添加EnterFrame侦听!") 

                        // 这里要添加enterFrame侦听, 否 

                        mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); 

                } 

                private function enterFrameHandler(e:Event):void 

                { 

                        var mc:MovieClip = e.target as MovieClip; 

                        //mc.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 

                        // 刚load进来的,第一次也是null 

                        // 不是刚load进来的第一次就可以取到了 

                        trace("子对象个数:", mc.numChildren, "/第一个子对象:", mc.getChildAt(0)); 

                        trace(mc.numChildren, mc.getChildAt(0)); 

                } 

        } 


复制代码这里是加载的我预先做好的swf, 主时间轴一个MC, 里面有4帧,分别为 
1:一个Shape元件 (可以直接获取) 
2:一个SimpleButton元件 (不能直接获取) 
3:一个MovieClip元件 (不能直接获取) 
4:一个绘制图形 (可以直接获取) 
posted on 2009-09-28 00:48  sungo  阅读(441)  评论(0编辑  收藏  举报