标签:
再使用flash制作UI资源时通常我们会在一个MC的不同帧中引入其他的MC(有可能引入的MC中还包含了MC),并为这些引入的MC设置实例名称。通过使用gotoAndStop到第几帧来引用里面的资源。。。可惜有的时候会报:引入的这个显示对象为null。。。。这该如何是好呢??
接下来就是我在使用FB与IDEA进行实际工作的时候找到的一些解决办法。。。
第一种:
有时候我们使用的已经是别人做好的UI。。。或者是自己通过反编译出来的UI。。。
用flash打开后导入IDEA中如果使用gotoAndStop后,显示对象为null,那么首先你要看看这个打开的flash UI是不是和你正在使用的是相同的版本。通过【文件】,【发布设置】,【播放器】,更改成最新的版本(有些版本更新程序中的处理有可能不同)
所以就在【播放器】里设置成最高本版试试。
第二种:
出现上述问题的原因主要是:MovieClip的帧显示对象的构造和帧代码是异步执行,所以才造成在第二帧代码访问帧上的对象为null的情况。这也就是要通过flash本身的渲染机制来处理。因为渲染机制是:先渲染舞台上的元件,然后再执行相应帧代码。如下一帧的执行顺序:
再来看看下面一段解释吧:
this._panel.gotoAndStop(this._panel.totalFrames);// 去最后一针的MC this._panel.addEventListener(Event.ENTER_FRAME, enterFrame2); public function enterFrame2(event:Event):void { var finaMC:MovieClip; finaMC= (this._panel["finalFrame"] as MovieClip); finaMC.play(); }
这样就不会报错了,原理就是,当完全渲染当前帧后,会抛出Event.ENTER_FRAME事件,我们监听这个事件,自然可以放心访问变量了。
方法2、
private function test():void { mc.gotoAndStop(2); mc.addEventListener(Event.FRAME_CONSTRUCTED, _onFrameConstructed); } private function _onFrameConstructed(e:Event):void { mc.removeEventListener(Event.FRAME_CONSTRUCTED,_onFrameConstructed); // mc是一个影片剪辑元件,aa是在mc元件第二帧中的名字是aa的影片剪辑元件 mc.aa.visible = false; }
这个原理和上面的是一样的。。。这样就可以很好的解决上面的问题了。。
AS3 调用gotoAndStop后,显示对象为null的解决方法
标签:
原文地址:http://www.cnblogs.com/duhuo/p/4229874.html