仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3266|回复: 8
打印 上一主题 下一主题

[学习教程] 来一发Flash as进门(8):加载和卸载swf文件-Flash actionscript

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 20:52:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
自从Macromedia在2005年8月发布MacromediaStudio8以来,我们一直在不停地探索关于它的新特性和新功能,因为这次软件升级给我们带来了太多的惊喜。
本例持续解说AS的基本常识,明天我们来进修FlashAS进门系列教程第七课:影片剪辑第二节加载swf文件,对Flash的AS编程有乐趣的伴侣能够到论坛与作者交换。
上一篇文章:Flashas进门(7):创立影片剪辑
第二节加载和卸载swf文件
上一节中,我们已能创立MC,本节我们将先容加载内部swf文件的办法。
loadMovie函数及MC的loadMovie()办法:
利用loadMovie()函数能够在播放原始SWF文件时,将SWF、JPEG、GIF或PNG文件加载到FlashPlayer中的影片剪辑中。加载的图象或SWF文件的左上角与方针影片剪辑的注册点对齐。
格局:loadMovie(“要加载的swf文件或图片“,方针影片剪辑);
要加载的swf文件或图片能够来历于收集,誊写格局为:http://....
能够来历于当地硬盘上的文件体系,誊写格局为:file:///.......
假如要加载的swf文件或图片与fla文件在统一目次下,则间接写文件名。
方针影片剪辑能够是任何影片剪辑,也能够是主场景,加载后,方针影片剪辑将被交换成加载的文件。
例1:加载一个收集上的swf文件sub.swf到创立的MC中:

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

例2:加载一个当地的swf文件sub.swf到主舞台:

loadMovie("file:///d:/myflash/sub.swf",this);

例3:加载一个不异目次下的图片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类的实例才干操纵其办法,事务,完成加载功效。如:
varmcLoader:MovieClipLoader=newMovieClipLoader();

loadClip办法:该办法的感化和用法与loadMovie()是一样的。如:
this.createEmptyMovieClip("picture_mc",1);
varmcLoader:MovieClipLoader=newMovieClipLoader();
mcLoader.loadClip("picture.jpg",picture_mc);
下面说到,用本类加载内部swf文件或图片能够在加载过程当中加以操纵,次要是经由过程几个事务的挪用来完成:onLoadStart事务:鄙人载的文件的第一个字节写进硬盘后,挪用。
格局:onLoadStart=function([target_mc:MovieClip]){}
个中的target_mc为要加载内部影片的方针MC。
onLoadComplete事务:当加载的文件完整下载时挪用。
格局:onLoadComplete=function([target_mc:MovieClip]){}
onLoadInit事务:当实行加载的剪辑的第一帧上的举措时挪用。
在挪用此侦听器后,您能够设置属性、利用办法,还能够与加载的影片交互。
格局:onLoadInit=function([target_mc:MovieClip]){}懂得MovieClipLoader.onLoadComplete和MovieClipLoader.onLoadInit之间的差别十分主要。onLoadComplete事务在加载SWF、JPEG、GIF或PNG文件以后但在使用程序初始化之前被挪用。此时,没法会见已加载的影片剪辑的办法和属性,因而您没法挪用函数、挪动到特定帧,等等。在多半情形下,最好改成利用onLoadInit事务,它在内容已加载并完整初始化后被挪用。
onLoadProgress事务:在加载过程当中(即在MovieClipLoader.onLoadStart
和MovieClipLoader.onLoadComplete
之间时),每当正加载的内容写进硬盘时挪用。
格局:onLoadProgress=function([target_mc:MovieClip],loadedBytes:Number,totalBytes:Number){}
loadedBytes为已加载的字节数。totalBytes为要加载的swf的总的字节数。假如在测试形式中,您试图对驻留在硬盘上的当地文件利用onLoadProgress,则它将不克不及一般事情,这是由于在测试形式中,FlashPlayer会将当地文件作为一个全体加载。
onLoadError事务:加载的文件未能加载时挪用。出于各类缘故原由,会挪用此侦听器;比方服务器封闭、找不到文件或产生平安侵占。
上述事务的挪用办法我给你整成一个公式的形式,间接套用就好了。
MovieClipLoader类事务挪用公式:
//起首创立一个MovieClipLoader工具
varmcLoader:MovieClipLoader=newMovieClipLoader();//mcLoader为自已取的称号
//然后创立一个侦听工具
varlistener:Object=newObject();//listener为自已取的称号
//挪用以下事务之一或多个
listener.onLoadStart=function(target_mc:MovieClip){}
listener.onLoadComplete=function([target_mc:MovieClip]){}
listener.onLoadInit=function([target_mc:MovieClip]){}
listener.onLoadProgress=function([target_mc:MovieClip],
loadedBytes:Number,totalBytes:Number){}
//MovieClipLoader工具挪用侦听工具
mcLoader.addListener(listener);
//MovieClipLoader工具加载内部swf或图片
mcLoader.loadClip(“内部文件地点”,方针影片剪辑);



上面先容MovieClipLoader类的几个办法
loadClip办法:在播放原始影片时,将SWF、JPEG、渐进式JPEG、非动画GIF或PNG文件加载到FlashPlayer中的影片剪辑中。
addListener(侦听工具)办法:注册一个工具,以便在挪用MovieClipLoader事务处置函数时吸收关照。
getProgress(target:Object)办法:前往正在经由过程利用MovieClipLoader.loadClip()
加载的文件的已加载字节数和总字节数;前往一个具有以下两个整数属性的工具:bytesLoaded
和bytesTotal。
removeListener(侦听工具)办法:删除在挪用MovieClipLoader事务处置函数时用来吸收关照的侦听器。
unloadClip(target:Object)办法:删除经由过程利用MovieClipLoader.loadClip()加载的影片剪辑。



上面经由过程一个实习来加深了解本节课所先容的内容,次要使用MovieClipLoader类来加载内部文件加载过程当中,用进度条来显现加载进度。本节的实习请保留原文件,待下一节把持工夫轴后,将在本实习的基本上,完成一个播放器。

1、新建flash文档,然后在第一层画一个播放器的形状,这个我不作先容,我画的以下图,你完整能够画得更悦目一些。这里要说一说两头的播放屏幕(黑的那块)的巨细成绩。Flash文档默许的巨细是550x400,那末这个播放屏幕也应按这个比例来画,它的巨细是文档巨细的80%,因而,宽为:550x0.8=440,高为400x0.8=320.将这个播进屏幕程度居中,只管往上放,将上面多留一些土地,今后有效。然后用变形工具点中它,将注册点移到左上角,翻开属性面板,纪录下它的x,y坐标备用。图层上锁。




2、新拔出一图层,按下图地位放一个静态文本,内容为:“文件地点:”;再放一个输出文本,在属性面板实例称号为:url_txt.新建一按钮元件,标签为:“翻开”,属性面板实例称号为:load_btn.将按钮放输出文本右侧。

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




4、好了,接上去写代码。新建一层,取名为“action”.

翻开帧到作面板,输出以下语句:
load_btn.onRelease=function(){

attachMovie("loading","loading_mc",getNextHighestDepth());

loading_mc._x=80;

loading_mc._y=215;

loading_mc.loadt_mc._xscale=0;
varswfurl=url_txt.text;
vartype=swfurl.substr(-3,3);
createEmptyMovieClip("swf_mc",1);
varmcLoader:MovieClipLoader=newMovieClipLoader();
varlistener:Object=newObject();
listener.onLoadProgress=function(target:MovieClip,bytesLoaded:Number,bytesTotal:Number):Void{
loading_mc.loadt_mc._xscale=Math.floor((bytesLoaded/bytesTotal)*100);


}
listener.onLoadInit=function(swf_mc){

loading_mc.removeMovieClip();

swf_mc._x=60;

swf_mc._y=8;

if(type=="swf"){

swf_mc._xscale=swf_mc._yscale=80;

}else{

while((swf_mc._width>440)||(swf_mc._height>320)){

swf_mc._xscale-=1;

swf_mc._yscale-=1;

}

}

}
mcLoader.addListener(listener);
mcLoader.loadClip(swfurl,swf_mc);
}
测试影片,在文本框中输出内部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仍是图片。
varswfurl=url_txt.text;
vartype=swfurl.substr(-3,3);
创立一个空的MC用来加载内部文件
createEmptyMovieClip("swf_mc",1);
创立一个MovieClipLoader工具用于加载内部文件,创立一个侦听工具用于挪用MovieClipLoader的事务。
varmcLoader:MovieClipLoader=newMovieClipLoader();
varlistener:Object=newObject();
挪用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呢?这是为了,使坚持宽高比例,以避免变形。
listener.onLoadInit=function(swf_mc){

loading_mc.removeMovieClip();

swf_mc._x=60;

swf_mc._y=8;

if(type=="swf"){

swf_mc._xscale=swf_mc._yscale=80;

}else{

while((swf_mc._width>440)||(swf_mc._height>320)){

swf_mc._xscale-=1;

swf_mc._yscale-=1;

}

}

}
最初MovieClipLoader工具侦听侦听工具,加载影片。
mcLoader.addListener(listener);
mcLoader.loadClip(swfurl,swf_mc);

功课:制造这个播放器

“fla”是Flash的原始档,只能用对应版本或更高版本的Flash打开编辑。
再现理想 该用户已被删除
沙发
发表于 2015-1-17 14:55:11 | 只看该作者
在与制作传统动画相比较的同时,flash具有便捷、节省人力财力,节约时间、推广方便的许多优势。但与此同时它也具有一点的缺点。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-21 09:43:34 | 只看该作者
假设一个Web设计者需要让一页上的不同元素之间相互作用。如果其中的一些元素出现在Box内,而另一些在Box之外,那么设计者就很不幸。
山那边是海 该用户已被删除
地板
发表于 2015-1-30 14:07:16 | 只看该作者
还有,艺术上的优势——各异的风格;创作手法独特;独立性和原创性;拓展出新的表达空间;
活着的死人 该用户已被删除
5#
发表于 2015-2-6 13:30:13 | 只看该作者
FLASH广告的问题主要表现在:
若相依 该用户已被删除
6#
发表于 2015-2-16 09:04:30 | 只看该作者
不能设置“alt”属性,失去了一次被搜说引擎检索到的机会。
因胸联盟 该用户已被删除
7#
发表于 2015-3-5 03:51:33 | 只看该作者
在Web页面上使用声音是可能的,但是在精确的时间播放声音几乎是不可能的。Flash通过把声音放入时间期限内解决了这个问题,因此你现在可以把声音连接到动画的特定部分或者某个用户交互过程。
不帅 该用户已被删除
8#
发表于 2015-3-19 17:15:54 | 只看该作者
flash的流行因素包括了技术上的优势——技术本身的优势;技术掌握上的优势;其他技术的弱势;
分手快乐 该用户已被删除
9#
发表于 2015-3-30 08:21:53 | 只看该作者
flash 有这么多的优势,那么它的优缺点和设计方面的关系是什么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-28 16:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表