免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享

第十二课:影片剪辑Part2加载外部swf文件

本文来自:★flash之路-flash技术交流★ 转帖请注明出处! 作者:网雨霏霏 您是第4266个浏览者

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
flashroad友情提示:
“点评”不是“回帖”!

上一话中,我们已经能创建MC,本节我们将介绍加载外部swf文件的方法。




一、loadMovie函数及MC的loadMovie()方法:

    使用loadMovie() 函数可以在播放原始SWF文件时,将另外一个SWF或者图像(JPEG、GIF 或 PNG) 文件加载到Flash Player中的影片剪辑中。加载的SWF或图像文件的左上角与目标影片剪辑的注册点对齐。

格式:
loadMovie("要加载的swf文件或图片",目标影片剪辑);

1、要加载的swf文件或图片可以来源于网络,书写格式为:http://....
也可以来源于本地硬盘上的文件系统,书写格式为:E:/swf/1.swf
如果要加载的swf文件或图片与fla文件在同一目录下,则直接写文件名。
2、目标影片剪辑可以是任何影片剪辑,也可以是主场景。加载后,目标影片剪辑将被替换成加载的文件。

加载一个网络上的swf文件123.swf到创建的MC中:

this.createEmptyMovieClip("logo_mc", 1);
loadMovie("http://www.abc.com/123.swf", logo_mc);


加载一个本地的swf文件tst.swf到主舞台:

loadMovie("E:/swf/tst.swf", this);


加载一个相同目录下的图片picture.jpg到创建的MC中:

this.createEmptyMovieClip("picture_mc", 1);
loadMovie("picture.jpg",picture_mc);


以上是loadMovie函数的写法,而MC的loadMovie()方法也一样,只不过写法不同,如:this.createEmptyMovieClip("picture_mc", 1);
picture_mc.loadMovie("picture.jpg");




二、loadMovieNum 函数

       在播放原始SWF文件时,将SWF或图片(JPEG、GIF 或 PNG)文件加载到一个级别中。用法跟loadMovie一样。
只是它不是指明目标影片剪辑,而是加载到一个深度上。
比如要加载相同目录下的swf文件myflash.swf到深度为2的级别中:
loadMovieNum("myflash.swf",2);

要注意的是:上一节我们介绍了,当深度相同时,新加载的对象会覆盖原来的对象。我们也以用下面一句来加载外部swf文件:
loadMovieNum("myflash.swf",this.getNextHighestDepth());




三、MovieClipLoader类

       此类用于实现在SWF、JPEG、GIF和PNG 文件正被加载到影片剪辑中时提供状态信息的侦听器回调。
也就是说用这个类加载swf文件,可以在加载过程中进行控制,如观察加载进度等。要使用MovieClipLoader类就应首先用构造函数创建一个MovieClipLoader类的实例才能操作其方法、事件,实现加载功能。

var mcLoader:MovieClipLoader = new MovieClipLoader();

loadClip方法:该方法的作用和用法与loadMovie()是一样的。

本帖隐藏的内容需要回复才可以浏览


         上面说到,用本类加载外部swf文件或图片可以在加载过程中加以操作,主要是通过几个事件的调用来实现:
1、onLoadStart事件:在下载的文件的第一个字节写入硬盘后,调用。
格式:onLoadStart = function([target_mc: MovieClip]) {}
其中的target_mc为要加载外部影片的目标MC。

2、onLoadComplete事件:当加载的文件完全下载时调用。
格式:onLoadComplete = function([target_mc: MovieClip]) {}

3、onLoadInit事件:当执行加载的剪辑的第一帧上的动作时调用。
在调用此侦听器后,您可以设置属性、使用方法,还可以与加载的影片交互。
格式:onLoadInit = function([target_mc: MovieClip]) {}


了解 MovieClipLoaderonLoadCompleteMovieClipLoader.onLoadInit之间的差异非常重要:
onLoadComplete事件在加载 SWF、JPEG、GIF 或 PNG 文件之后但在应用程序初始化之前被调用。此时,无法访问已加载的影片剪辑的方法和属性,因此您无法调用函数、移动到特定帧,等等。在多数情况下,最好改为使用onLoadInit事件,它在内容已加载并完全初始化后被调用。

4、onLoadProgress事件:在加载过程中(即在 MovieClipLoader.onLoadStart
和 MovieClipLoader.onLoadComplete 之间时),每当正加载的内容写入硬盘时调用。
格式:
onLoadProgress = function([target_mc: MovieClip], loadedBytes: Number, totalBytes: Number) {}

loadedBytes为已经加载的字节数。totalBytes为要加载的swf的总的字节数。如果在测试模式中,您试图对驻留在硬盘上的本地文件使用 onLoadProgress,则它将不能正常工作,这是因为在测试模式中,Flash Player 会将本地文件作为一个整体加载。

5、onLoadError事件:加载的文件未能加载时调用。
出于各种原因,会调用此侦听器。例如服务器关闭、找不到文件或发生安全侵犯。


现在给出一个模式,将上述事件的调用方法整合在一起,需要时直接套用就行了:
MovieClipLoader类事件调用公式:

本帖隐藏的内容需要回复才可以浏览



四、MovieClipLoader类的几个方法

1、loadClip方法:在播放原始影片时,将 SWF、JPEG、渐进式 JPEG、非动画 GIF 或 PNG 文件加载到 Flash Player 中的影片剪辑中。

2、addListener(侦听对象)方法:注册一个对象,以便在调用 MovieClipLoader 事件处理函数时接收通知。

3、getProgress(target: Object)方法:返回正在通过使用 MovieClipLoader.loadClip()
加载的文件的已加载字节数和总字节数;返回一个具有以下两个整数属性的对象:bytesLoaded
和 bytesTotal。

4、removeListener(侦听对象)方法:删除在调用 MovieClipLoader 事件处理函数时用来接收通知的侦听器。

5、unloadClip(target: Object)方法:删除通过使用 MovieClipLoader.loadClip() 加载的影片剪辑。




五、练习
       主要运用MovieClipLoader类来加载外部文件加载过程中,用进度条来显示加载进度。本节的练习请保存源文件,待下一节控制时间轴后,将在本练习的基础上,完成一个播放器。


1、在图层1画一个播放器的外形,这个我不作介绍,我画的如下图,你完全可以画得更好看一些。这里要说一说中间的播放屏幕(黑的那块)的大小问题。Flash 文档默认的大小是550x400,那么这个播放屏幕也应按这个比例来画,它的大小是文档大小的80%,因此,宽为:550x0.8=440,高为 400x0.8=320.将这个播入屏幕水平居中,尽量往上放,将下面多留一些地盘,以后有用。然后用变形工具点中它,将注册点移到左上角,打开属性面板,记录下它的x,y坐标备用。图层上锁。


2、新插入一个图层2,按下图位置放一个静态文本,内容为:“文件地址:”;再放一个输入文本,在属性面板实例名称为:url_txt.新建一按钮元件,标签为:“打开”,属性面板实例名称为:load_btn.将按钮放输入文本右边。

3、新建一MC,取名loading,用矩形工具,禁止笔触,绿色填充,画一个300x5的矩形。然后转换成MC。双击它进新的MC编辑窗口,将矩形条垂直居中,左对齐。打开属性面板,为实例名称取名为loadt_mc   回到loading元件编辑窗口,将矩形元件垂直居中,左对齐。在矩形元件的上面放一静态文本,内容为:“正在加载文件,请稍候…”.在库中右击 loading元件,点连接,在“为ActionScript导出“前打钩。在标识标中输入loading,实际上那里本来就有了,不用输哈,确定。

4、好了,接下来写代码。新建一层,取名为as

打开帧到作面板,输入如下语句:

本帖隐藏的内容需要回复才可以浏览


测试影片,在文本框中输入外部swf或图片的地址,点击打开,外部文件将加载到播放窗口中,播放。注意:如果外部文件在网络上,那么就必须用 http://.....格式,如果在本地硬盘上,则应输入完整路径,如果与本swf文件在同一个目录中,则只须输入文件名即可。


代码全部放在按钮的点击事件中:
load_btn.onRelease =function(){
首先将进度条从库中加载到舞台上,并设置它的位置,使它处于播入屏幕中间,因为现在还没有开始下载,所以设置进度条的长度为0.
attachMovie("loading","loading_mc",getNextHighestDepth());

loading_mc._x=80;

loading_mc._y=215;

loading_mc.loadt_mc._xscale=0;
接下来,声明一个变量swfurl来存放用户在地址文本中输入的外部文件地址。用type来存放地址的最后三个字符,用以判断加载的是swf还是图片。
var swfurl = url_txt.text;
var type = swfurl.substr(-3,3);
创建一个空的MC用来加载外部文件
createEmptyMovieClip("swf_mc", 1);
创建一个MovieClipLoader对象用于加载外部文件,创建一个侦听对象用于调用MovieClipLoader的事件。
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
调用onLoadProgress事件,即在下载过程中,读取已下载的字节数和总的字节数,并用它们的比值,设置进度条的长度。
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
loading_mc.loadt_mc._xscale=Math.floor((bytesLoaded/bytesTotal)*100);

}
调用onLoadInit 在加载完成后,删除进度条。并设置加载的文件的位置和大小,使之适应播入屏幕的大小。上面我们记录的播放屏幕的左上角坐标现在有用了,将加载的文件的坐标设为记录的值。文件的大小,首先判定加载的是swf文件还是图片。为什么在判断呢?这是因为加载swf文件后,目标MC的_width和_hight就失灵了,因而就只能用_xscaleswf_,_yscale 来控制,很显然这不科学的,因为加载的swf大小不可能都一样,按比例缩放无法达到精确的尽寸。所以我们只能把要加载的swf文件看成550x400的大小来缩小到80%。而图片则可用宽高属性来设置,所以分开来,整精确一个算一个。按上面存的用户输入的地址的最后三个字符,如果是swf那么就是加载 swf文件了,就用_xscaleswf_,_yscale来控制。如果不是则是加载图片那么就可用宽高属性来判断加载的图片是否大于播放屏幕,如果大了,则调整_xscaleswf_,_yscale属性,使之减小。为什么还是调整_xscaleswf_,_yscale呢?这是为了,使保持宽高比例,以免变形。

本帖隐藏的内容需要回复才可以浏览

最后MovieClipLoader对象侦听侦听对象,加载影片。
mcLoader.addListener(listener);
mcLoader.loadClip(swfurl,swf_mc);

您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.

获得 大天使卡 一张

卡片说明:网雨霏霏帮助迷路的小朋友找到家长,家长为表达谢意,付出了7威望

卡片效果:+7

友情提示:单击下列任意一个表情,即可瞬间自动回复本帖!

好贴......
郁闷......
开心......
擦汗......
鄙视......
狂怒
谢谢
爱你呦
拜托了
嗯嗯
OMG
求关注
伤心......
无奈.....
无奈.....
无奈.....
无奈.....
无奈.....
哈哈哈
NO
OK
what
我来了

最近访问本帖者列表:

打赏

取消

感谢您的支持,我会继续努力的!

扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by 爱秀代码,分享从这里开始,精彩与您同在

点评
B Color Smilies

您还可以输入:个字符
X

X

 

B Color Image Link Quote Code Smilies
高级模式 | 发新话题

您需要登录后才可以回帖 登录|立即注册

快速
返回顶部
返回首页