用户名: 密码: 验证码:           网站地图 高级搜索 RSS订阅 收藏本站
Google
您的位置:首页>>图形设计>>Flash>>阅读资讯:Flash片头loading与MovieClipLoader

Flash片头loading与MovieClipLoader

[ 来源: | 阅读:次 | 更新日期:2007-10-10 23:40:13 | 评论 0 条 | 我要投稿 ]

  aw话外音:有时候,我们这样写: yueluo.net

  1、var mcl:MovieClipLoader = new MovieClipLoader ();
  2、var mcl = new MovieClipLoader (); www.yueluo.net

  发现第一种写法无法为MCL制定onLoadStart等事件方法。这是编译器根据指定变量的数据类型产生的问题。osflash的一些朋友给了一些有用的观点,我也发现这个问题正好涉及到Flash内部的事件响应机制,不妨介绍一下:

  Flash的三种事件响应机制 yueluo.net

  1、简单的回调函数,最老的;
  2、侦听器,ASBroadcaster,FlashMX时代;
  3、事件侦听器,EventDispather,FlashMX2004时代

www.yueluo.net

  这里,MCL用的是第二种机制,而整套V2组件则使用最后一套机制。

  附:MCL官方申明,注意:上述方法中,仅包含getProgress方法! 月落网

  

字串7

  intrinsic class MovieClipLoader
{
  function MovieClipLoader();

  字串8

    function addListener(listener:Object):Boolean;
  function getProgress(target:Object):Object;
  function loadClip(url:String, target:Object):Boolean;
  function removeListener(listener:Object):Boolean;
  function unloadClip(target:Object):Boolean;
} 字串6

  yueluo.net

  个人补充:1、2在不严格要求数据类型的时候可以通用。 字串7

  下面开始介绍用侦听器来检测MCL事件的方法。在此之前,我们解决一个最常见的问题,我们经常会在论坛中看到有人这样提问:

字串9

  引用:我动态地建立了一些MC,并逐个分配给它们一个事件句柄(标志)。然后,我将外埠资源读取到它们之中。但是这些分配好的事件句柄都不工作了!
紧接着,发问人一般会贴出一对乱七八糟的代码,并大呼救命。
月落

  那么,我们首先来分析一下这个错误发生的原因:当外埠资源被载入到一个MC中时,这个MC将会重新初始化。这意味着任何被预先制定好的代码都将付之东流。对于开发人员已经手动在舞台上安排好的MC则并没有相关的麻烦,这是因为任何直接通过onClipEvent制定到MC的代码都能幸免被重新初始化。而动态建立的MC则进行上述的“初始化”,因为我们是在运行中给它们配置的事件代码。
  我们如何避免这个问题呢?其实方法太多了,很多论坛也进行了极为详细的讨论,我就不多赘述了。
  你现在也许还记得刚才我介绍的“读取外埠数据参与Flash应用程序部署是一件非常重要和常见的工作,尤其是我们常常需要检测这些数据加载的进度字串7

  我们已经介绍了MCL的几个回调函数,所以这里也不再赘述了。我们现在制作这样一个效果:缩略图标式的图片浏览系统。我们将要从外部读取一些JPG图片,将它们放入我们动态部署的MC中。并且我们希望这些动态建立的MC都具有各自的onPress事件。我们通过在MC装载好外部资源之后再为之分配事件。

月落网

  在我们开始之前,我还想提醒大家注意一些经常出现的疏漏:一定要在发布的时候设置成Flash7+AS2以上的版本;其次,用浏览器测试你的效果,而不是IDE;否则你将会得到奇怪的结果。

字串5

  现在,我们开始编制代码,你会发现它比你想象的要简单得多。

www.yueluo.net

  1、新建一个Flash文档。
  2、找四张100*100像素的缩略图片。
  3、建立一个动态文本框,大概在300*300像素左右,使用12号字体,并使之现实边框,这样我们更好监测。别忘了设置它为多行的。
  4、建立一个100X100像素的矩形,转变为MC,然后将它移出场景。这时候,他已经出现在库中了。在库中,设置他的链接名为“img”,并使其“在第一帧导出”。其实这个矩形会在外部资源载入的时候被取代,现在只是为了调试方便。
  5、在刚才放置textBox文本框的层之上新建一层,这一层用于放置我们的代码,先写上:
  

字串7

stop();

  字串6

  6、现在我们定义一个MCL的实例,此外定义一个基本对象,作为我们的侦听器:
   字串8

myMCL = new MovieClipLoader(); //define MovieClipLoader
myListener = new Object(); //define listener

  yueluo.net

  7、接下来我们用侦听器来侦听onLoadComplete事件,该事件的作用上文已经提到了。我们现在把它交给listener对象,而不是MCL实例。当然,最终要把侦听器对象再交回MCL(以侦听其回调函数)的时候,得到的效果就是我们需要的效果了。

月落网

  记住,只有当读取完毕的时候,对MC部署事件任务才是安全可靠的!所以,在onLoadComplete被触发的时候才部署这个onPress事件给MC: 字串9

myListener.onLoadComplete = function(targetMC){
 debug.text += "LOADING OF " + targetMC
 + " COMPLETE" + newline;
 targetMC.onPress = function() {
 debug.text += newline
 + "targetMC = " + targetMC._name;
 }
}

字串7

  注:上述代码中有几行被人为打断,但这并不影响效果。

字串9

  你也许已经注意到了,MC的实例名称在onLoadComplete被触发的时候是作为一个参数的身份传递给onLoadComplete的,这样我们控制这个MC就非常方便了。比如这里就可以用点击MC来检测事件是否被成功部署给MC。

yueluo.net

  8、现在我们建立一个函数,它包含一个简单的循环来部署场景上的MC。并且及时地为每一个部署好的MC分配读取外埠资源的任务(loadClip方法),代码如下: www.yueluo.net

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
 }
}

字串8

  9、到这里基本上就完成了。现在我们剩下的工作就是注册侦听器并且按照需求调用相关函数、方法,反映到代码上就是以下两行: yueluo.net

myMCL.addListener(myListener);
initClips();

字串6

  注意这里的顺序,我们的侦听器对象在调用initClip()函数之前就被作用于MCL实例了。现在我们的MC的onPress事件可以顺利工作了,因为当图片被完全读入之后,事件才被分配过去。我们的代码也非常简洁。我们再也不用为了loading而去制作麻烦的循环了,MovieClipLoader帮我们完成了所有工作! www.yueluo.net

  附:完整代码如下:

月落

  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(); 字串7

  到此为止,你应该相信MCL确实是一个不可多得的好东西了吧?

月落

  下一节我们讨论用V2组件项目做Flash loading的问题。

字串7


共2页: 上一页 [1] 2 下一页
Tags:Flash片头loading与MovieClipLoader
责任编辑:
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为