[Flash开发笔记] 正确理解MovieClipLoader的onLoadComplete事件

    在Flash8中, MovieClipLoader 类用于实现在 SWF、JPEG、GIF 和 PNG 文件正被加载到影片剪辑中时提供状态信息的侦听器回调。
    它的onLoadComplete事件是当文件完全下载时调用。

    下边给个示例:
_root.createEmptyMovieClip( " holder_mc " , 1 );
var  loader:MovieClipLoader = new  MovieClipLoader();
var  lis:Object = new  Object();
lis.onLoadComplete
= function (target_mc:MovieClip,httpStatus:Number) {
    
    holder_mc.removeMovieClip();
    
}


loader.addListener(lis);
loader.loadClip(
" TEST.swf " ,holder_mc);

    看看这个示例你们能否正常使用?
    结果是Flash8和Flash9中,都会让Flash 崩溃
    问题就出在那句:holder_mc. removeMovieClip();

    按理,这样是不该有错的。
    究竟是什么原因呢?

    试试下边写法:

_root.createEmptyMovieClip( " holder_mc " , 1 );
var  loader:MovieClipLoader = new  MovieClipLoader();
var  lis:Object = new  Object();
lis.onLoadComplete
= function (target_mc:MovieClip,httpStatus:Number) {
    
    _global.setTimeout(function () {
          holder_mc.removeMovieClip();
    }, 500);
    
}


loader.addListener(lis);
loader.loadClip(
" TEST.swf " ,holder_mc);
    (关于_global.setTimeout,参见 flash 8 中的 setTimeout() )

    结果是正常的,Flash没有崩溃。看看二者的差别,问题就在于“延时”差别上。

    那么 onLoadComplete事件的含义倒底是什么?都下载完了为什么还不能立马操作呢?具体原因不清楚,我只是猜想:这应该是Windows系统中常有的现象,比如我们下载个大文件,当下载窗口关闭的一刹那,你会发现磁盘上还未出现下载的文件,如果在这时候去操作文件,极有可能是无法操作的错误。如果按照这个道理解释,我想就能理解了,即 onLoadComplete事件仅仅代表文件的最后一个字节下载完成,并不代表本地的文件数据处理操作也同时完成,或者说“收尾”工作还在进行,由于脚本执行是很快的,在足够短的时间内,执行删除等操作,即得到了我们不想要的结果。
    除了删除之外,如果给"TEST.swf"中的某些变量赋值,或操作其中的对象的话,也会得到不正确的结果。(这一点我实际遇到了,最终也是用延时的办法解决了。)

    所以,最后得出一个简单的结论:在使用 onLoadComplete的时候,如果是对 target_mc 内部进行操作(删除本身,里面的对象数据访问或更改)时,要进行一点 延时,以免出现不想要的结果。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值