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

再使用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;

}

这个原理和上面的是一样的。。。这样就可以很好的解决上面的问题了。。

 
时间: 2024-08-06 22:18:56

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

微信二次分享不显示摘要和图片的解决方法

微信二次分享不显示摘要和图片的解决方法 解决不显示摘要和图片的问题,需要调用微信公众号的js-sdk的api ,需要前端和后台的配合, 后台需要返回 appid (公众号的appid ) . timestamp (生成签名的时间戳) .nonceStr (签名的随机字符串) . signature (签名* 可能出错): 1.绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"js接口安全域名".(特别提示不需要加上http或者h

Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:

直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend({  show:function(){   alert("ready");  }});setInterval("show()",3000);}); 方法2. 指定定时执行的函数时不要使用引号和括号.  $(function(){function show(){   al

VIM显示utf-8文档乱码解决方法

1.相关基础知识介绍 在Vim中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding和termencoding.在实际使用中,任何一个选项出现错误,都会导致出现乱码.因此,每一个Vim用户都应该明确这四个选项的含义.下面,我们详细介绍一下这四个选项的含义和作用. (1)encoding encoding是Vim内部使用的字符编码方式.当我们设置了encoding之后,Vim内部所有的buffer.寄存器.脚本中的字符串等,全都使用这个编码.Vi

svn查看日志(show log)显示时间为1970的解决方法

问题: 在修改文件后show log无法显示日志,上面的时间会自动在2016年和1970年间跳,而且设置不了时间.解决方法:1.编辑svnserve.conf,设置“anon-access=none” 2.在authz中添加 [/]* = r 3,清理svn的cache 即可 svn查看日志(show log)显示时间为1970的解决方法,布布扣,bubuko.com

项目部署到tomcat6.0启动成功后访问页面报500错误解决方法

如题:项目部署到tomcat6.0启动成功后访问页面报500错误解决方法,很奇葩,启动的时候没有任何问题,但输入访问地址后报500,去年国庆放假前夕,为这个问题伤神了半天最后解决了,今天又碰到了,乍一看摸不着头,后面仔细回想了下,迅速解决了问题. 原因:项目里面的jar和tomcat里面lib里面的jar重复了. 解决方法: 1.要么更换tomcat7或之后的版本,之后的版本就不会出现这个问题. 2.去部署之后的tomcat的webapps\项目名\WEB-INF\lib 里面删掉jsp-api

php 表单提交错误后返回数据消失问题的解决方法

本文章向码农们介绍php 表单提交错误后返回数据消失问题的解决方法,感兴趣的码农可以参考一下. 表单提交错误后返回数据消失怎么办呐,今天就来分析解决一下这个问题. 状况概述: 做填写表单信息提交的时候会碰到一个问题就是当用户填写并提交表单后,程序判断不符合要求并返回,返回之后之前填写的表单信息会被清空了的情况.如果填写的信息量少还无所谓,如果填写的信息量比较多,这会直接打击到填写信息的人的良好心情.因此解决表单提交错误返回后填写的内容消失的问题是一个提高用户体验度的迫在眉睫的问题. 对于这种问题

chrome显示12px以下字体的解决方法

demo如下: <!doctype html> <html> <head> <title>chrome显示12px以下字体的解决方法</title> </head> <style type="text/css"> * { margin: 0px; padding: 0px; font-family: "微软雅黑"; } .px12 { font-size: 12px; } .px10

复制工程或修改工程名字后找不到第三方库解决方法

问题: couldn't found -lwexin 等与第三方库有关的关键词报错,如上图. 解决方法:在工程文件中删掉第三方库的引用,然后再重新添加进来.command+B,OK. 复制工程或修改工程名字后找不到第三方库解决方法

使用Ef查询出现的问题The cast to value type &#39;System.Boolean&#39; failed because the materialized value is null.的解决方法

把值类型的系统.布尔的失败是因为物化值是null.结果类型的泛型参数或查询必须使用可空类型. 解决方法: 请确保你查询中的字段值不为空或者做为空判断 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法