flash完美的loading效果-吐血整理!
来源:awflasher 时间:07-05-04 点击: 点击这里收藏本文
你也许已经注意到了,MC的实例名称在onLoadComplete被触发的时候是作为一个参数的身份传递给onLoadComplete的,这样我们控制这个MC就非常方便了。比如这里就可以用点击MC来检测事件是否被成功部署给MC。
8、现在我们建立一个函数,它包含一个简单的循环来部署场景上的MC。并且及时地为每一个部署好的MC分配读取外埠资源的任务(loadClip方法),代码如下:
function initClips(){
for (i=1; i<=4; i++){
this.attachMovie("img", "img" + i, i);
this["img"+i]._x = i*110;
myMCL.loadClip("0" + i + ".jpg" ,
this["img"+i]); //code wrapped
}
}
9、到这里基本上就完成了。现在我们剩下的工作就是注册侦听器并且按照需求调用相关函数、方法,反映到代码上就是以下两行:
myMCL.addListener(myListener);
initClips();
注意这里的顺序,我们的侦听器对象在调用initClip()函数之前就被作用于MCL实例了。现在我们的MC的onPress事件可以顺利工作了,因为当图片被完全读入之后,事件才被分配过去。我们的代码也非常简洁。我们再也不用为了loading而去制作麻烦的循环了,MovieClipLoader帮我们完成了所有工作!
附:完整代码如下:
stop();
myMCL = new MovieClipLoader();
myListener = new Object();
myListener.onLoadComplete = function(targetMC)
{
targetMC.onPress = function ()
{
trace("pressed");
}
}
function initClips()
{
for (i=1;i<=4;i++)
{
this.attachMovie("img","img"+i,i);
this["img"+i]._x = i*110;
myMCL.loadClip(url,this["img"+i]);
}
}
myMCL.addListener(myListener);
initClips();
到此为止,你应该相信MCL确实是一个不可多得的好东西了吧?:)
====
三、含有v2组件相关的问题
V2,也爱,也恨!这里介绍关于含有V2组件项目的loading问题
转载请注明原帖:http://www.awflasher.com/blog/?id=468
V2组件自面世以来就颇受争议,大体概括如下:
优点:
·界面比V1组件更加美观、统一,人机交互模式更加完善
·均采用面向对象脚本部署
缺点
·体积笨重,开发一些只用到一两个组件的小应用程序时很尴尬
消息机制方面使用EventDispather的消息广播机制,取代原有的AsBroadcast机制。使得刚出来的时候很多人根本不会用。
这里就不讨论更多了,先说loading。含有大量v2组件的产品要想见人肯定是不能不作loading的,比如aw's blog左边的那个blog小贴士。然而每次在loading的时候似乎都会遇到麻烦。那就是笨重的体积全部被放到第一帧导出了,这样导致对一些300k以内的,含有v2组件的SWF文件进行远程载入的loading效果变得捉襟见肘。
解决的办法也不是没有,简单概括为三个步骤:
一、去掉“Export in first frame”
http://www.awflasher.com/blog/attachments/200603/24_153106_v2linkage.gif
二、在发布的时候设置一下“Export frame for classes”,这一点非常重要!
http://www.awflasher.com/blog/attachments/200603/24_153056_v2exporter.gif
三、对于外埠读取的含有V2的swf文件,将容器mc进行如下设置:
loader_mc._lockroot = true;
好了,现在放心享受精彩而笨重的V2组件吧~!
把此文章收藏到: