码迷,mamicode.com
首页 > 其他好文 > 详细

AS3 调用gotoAndStop后,显示对象为null的解决方法

时间:2015-01-16 23:37:15      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:

再使用flash制作UI资源时通常我们会在一个MC的不同帧中引入其他的MC(有可能引入的MC中还包含了MC),并为这些引入的MC设置实例名称。通过使用gotoAndStop到第几帧来引用里面的资源。。。可惜有的时候会报:引入的这个显示对象为null。。。。这该如何是好呢??

接下来就是我在使用FB与IDEA进行实际工作的时候找到的一些解决办法。。。

第一种:

有时候我们使用的已经是别人做好的UI。。。或者是自己通过反编译出来的UI。。。

用flash打开后导入IDEA中如果使用gotoAndStop后,显示对象为null,那么首先你要看看这个打开的flash UI是不是和你正在使用的是相同的版本。通过【文件】,【发布设置】,【播放器】,更改成最新的版本(有些版本更新程序中的处理有可能不同)

所以就在【播放器】里设置成最高本版试试。

技术分享

 

第二种:

出现上述问题的原因主要是:MovieClip的帧显示对象的构造和帧代码是异步执行,所以才造成在第二帧代码访问帧上的对象为null的情况。这也就是要通过flash本身的渲染机制来处理。因为渲染机制是:先渲染舞台上的元件,然后再执行相应帧代码。如下一帧的执行顺序:

  1. Event of event type Event.ENTER_FRAME dispatched(发送 Event.ENTER_FRAME 事件)
  2. Constructor code of children MovieClips is executed(执行子MC的构造函数)
  3. Event of event type Event.FRAME_CONSTRUCTED dispatched(发送 Event.FRAME_CONSTRUCTED 事件
  4. MovieClip frame actions are executed(执行MC的构造函数)
  5. Frame actions of children MovieClips are executed(执行子MC的帧代码)
  6. Event of event type Event.EXIT_FRAME dispatched(发送 Event.EXIT_FRAME 事件
  7. Event of event type Event.RENDER dispatched(发送 Event.RENDER 事件

再来看看下面一段解释吧:

This caused all sort of issues in Flash Player 9 after issuing a gotoAndStop call to a frame with display list objects that didn’t exist on the frame where the gotoAndStop call was made. Due to the fact that display list children had yet to be instantiated, targeting a display object child would return null the first time an Event.ENTER_FRAME was called after the gotoAndStop.
(当调用gotoAndStop后,一系列显示对象并不存在。这是因为当发送 Event.ENTER_FRAME 事件时,显示对象并没有被实例化,所以此时返回对象为空。而通过侦听 Event.FRAME_CONSTRUCTED 事件,则可在对象实例化后才调用相关语句。
是不是感觉到了。。。
所以可以使用下面几种方法来实现
方法1、
 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!