`
#天琪#
  • 浏览: 155827 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

获取MovieClip跳帧后的子元件

    博客分类:
  • AS3
阅读更多
转自: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:一个绘制图形 (可以直接获取)
分享到:
评论
1 楼 Fis 2014-10-11  
赞一个,文章帮助我们解决问题了,我们要在用swf生成一个动画配置的时候需要读取每一帧里面每个显示对象的属性和信息,但是有些地方在关键帧转换的时候会出现null的情况,按照楼主所说,是因为新的 MovieClip 对象没有创建完成造成的,我们在遇到null的时候就做一个延迟,等一定时间后,继续运行剩余的配置生成的代码,给 MovieClip 足够的时间生成,问题就能解决了。。 多谢楼主的文章

相关推荐

Global site tag (gtag.js) - Google Analytics