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

Flash片头加载完美的loading的制作

[ 来源: | 阅读:次 | 更新日期:2007-10-5 22:48:17 | 评论 0 条 | 我要投稿 ]

4、然后,我们建立一个MCL对象,在第一帧输入以下脚本:

字串7

var myMCL = new MovieClipLoader();//create an instance of MovieClipLoader 字串9

aw附:这里我想罗索以下,关于Object的翻译。因为上述代码的注释中,老外用的是instance这个词,直译的话,Object是“对象”;Instance代表“实例”。前者更注重于其数据类型,而后者则更注重于其客观存在性。 月落

5. 现在我们就可以部署脚本了,在第一帧:

字串7

myMCL.onLoadStart = function (targetMC)
{
 var loadProgress = myMCL.getProgress(targetMC);
 myTrace ("The movieclip " + targetMC + " has started loading");
 myTrace("Bytes loaded at start=" + loadProgress.bytesLoaded);
 myTrace("Total bytes loaded at start=" + loadProgress.bytesTotal);
}
字串7

这个函数的第一行中申明了一个(对象类型的)变量,显然,这个变量的值由myMCL对象的getProgress方法获得.刚才已经介绍了getProgress方法,这里可以看到,返回的loadProgress.bytesLoaded就是loadProgress对象的bytesLoaded属性.
这里我再啰嗦一句:为什么返回一个对象,而不返回具体的值。这是有原因的。函数返回值的功能使得程序设计更加完美,然而很多情况下,我们要返回的并非一个值,我们可能返回两个或者更多的值,甚至它们的数据类型都不相同。这样,只有通过对象的形式来返回了。这是解决问题最简单最高效的方法。下面三句myTrace就呼应了之前我们定义的监控函数,这样就能看到我们关注的变量了。

月落网

6、我们已经为onLoadStart事件部署了相应的工作,接下来我们要为上述其他事件部署工作了。紧接着是onLoadProgress,它接受三个参数:targetMC, loadedBytes, totalBytes。分别代表目标容器MC实例;已经读取的体积、总体积。

月落网

myMCL.onLoadProgress = function (targetMC, loadedBytes, totalBytes) {
 myTrace ("movie clip: " + targetMC);
 myTrace("Bytes loaded at progress callback=" + loadedBytes);
 myTrace("Bytes total at progress callback=" + totalBytes);
}
字串9

7、我们的onLoadComplete方法仅接受一个参数,它就是容器MC实例。像onLoadStart一样,我们用getProgress方法来返回读取情况。

yueluo.net

myMCL.onLoadComplete = function (targetMC)
{
 var loadProgress = myMCL.getProgress(targetMC);
 myTrace (targetMC + " has finished loading.");
 myTrace("Bytes loaded at end=" + loadProgress.bytesLoaded);
 myTrace("Bytes total at end=" + loadProgress.bytesTotal);
}

字串6

8、onLoadInit方法将在所有加载的内容被下载到本地容器MC中之后才开始执行。这将使得你能更好的控制加载进来的内容的属性。我选择的图片非常大,这样我们可以把读取过程看得更加清晰,而我也要对已经加载的图片尺寸进行修整,让它能全部显示出来。

字串6

myMCL.onLoadInit = function (targetMC)
{
 myTrace ("Movie clip:" + targetMC + " is now initialized");
 targetMC._width = 170;
 targetMC._height = 170;
}
www.yueluo.net

9、还有一个回调方法onLoadError。如果有错误发生,它将会被触发。作为一个优秀的程序员,部署完善的应用程序的时候,对错误发生的避免措施是必不可少的!

字串6

myMCL.onLoadError = function (targetMC, errorCode)
{
 myTrace ("ERRORCODE:" + errorCode);
 myTrace (targetMC + "Failed to load its content");
}
字串5

10. Well that's the hard work out of the way. Now we just have to load the files in to their respective targets, using loadClip, and passing it two arguments: the location of your file, and the destination movieclip for the file to load in to.
10、我们终于将最复杂的工作部署好了。接下来我们只用使用loadClip方法读入我们需要的内容就行了。loadClip方法的两个参数分别是外埠资源的地址容器MC的实例

字串7

路径可以选择相对路径。注意,路径的相对性也是一个大问题,当SWF在非本路径的HTML中被引用的时候,遵从HTML所在的路径!这一点是很多Flash教程都忽视的。所以,有时候绝对路径也有绝对路径的好处。[路径问题源文件下载,下载了就一目了然了

字串6

myMCL.loadClip("http://www.yourdomain.com/test1.swf","_root.myMC1");
myMCL.loadClip("http://www.yourdomain.com/test2.swf ", "_root.myMC2");
myMCL.loadClip("http://www.yourdomain.com/pic.jpg", "_level0.myMC3");

www.yueluo.net

 

字串6

所有的调试工作最好在浏览器中,而非IDE中完成。而且脚本输出方式必须是AS2。
Remember, for everything to work properly you need to be testing throuhg a browser (and preferably on line so you can see the files loading in real time). You also need to be exporting your code as ActionScript 2. 字串9

In the second part of this tutorial I'm going to show you how to use the MovieClipLoader class in a real-world situation, in order to solve a common problem when assigning event handlers to MovieClips dynamically.
接下来,我将介绍实时调用MCL的情况。为了能适应更多的应用,我们经常动态地为MCL制定工作。 字串8

aw话外音:有时候,我们如此写: 字串5

1、var mcl:MovieClipLoader = new MovieClipLoader ();
2、var mcl = new MovieClipLoader (); 月落网

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

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

yueluo.net

这里,MCL用的是第二种机制,而整套V2组件则使用最后一套机制。
附:MCL官方申明,注意:上述方法中,仅包含getProgress方法!

yueluo.net

 

字串9

intrinsic class MovieClipLoader
{
  function MovieClipLoader(); yueluo.net

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

月落网

 

字串9

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

yueluo.net

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

引用 : 字串6

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

那么,我们首先来分析一下这个错误发生的原因:当外埠资源被载入到一个MC中时,这个MC将会重新初始化。这意味着任何被预先制定好的代码都将付之东流。对于开发人员已经手动在舞台上安排好的MC则并没有相关的麻烦,这是因为任何直接通过onClipEvent制定到MC的代码都能幸免被重新初始化。而动态建立的MC则进行上述的“初始化”,因为我们是在运行中给它们配置的事件代码。 字串5

我们如何避免这个问题呢?其实方法太多了,很多论坛也进行了极为详细的讨论,我就不多赘述了。 月落

你现在也许还记得刚才我介绍的“读取外埠数据参与Flash应用程序部署是一件非常重要和常见的工作,尤其是我们常常需要检测这些数据加载的进度字串6

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

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

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

字串8

1、新建一个Flash文档。 字串9

2、找四张100*100像素的缩略图片。

月落网

3、建立一个动态文本框,大概在300*300像素左右,使用12号字体,并使之现实边框,这样我们更好监测。别忘了设置它为多行的。 字串9

4、建立一个100X100像素的矩形,转变为MC,然后将它移出场景。这时候,他已经出现在库中了。在库中,设置他的链接名为“img”,并使其“在第一帧导出”。其实这个矩形会在外部资源载入的时候被取代,现在只是为了调试方便。 yueluo.net

5、在刚才放置textBox文本框的层之上新建一层,这一层用于放置我们的代码,先写上: 字串5

stop(); 字串9

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

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

共3页: 上一页 [1] 2 [3] 下一页
Tags:flash,as,loading
责任编辑:
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

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