| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash经验技巧 > 文章正文 用户登录
巧妙设置消除Flas
把秘密藏在图片中
对Apache进行简单
对ASP脚本源代码进

对A片中加载B片的一点经验           

对A片中加载B片的一点经验

作者:佚名 来源:闪吧 作者: minzojian 更新:2007-1-13 20:57:19 错误报告 我要投稿

有两个MC,甲片和乙片.乙片是一个桢动画影片.第一桢上写着AS:stop(),现在我们要用甲片来调用它,并让甲片来控制它,让它执行播放的命令.

KAN's FLASH DIRAY--------HOW TO LOAD MOVIE INTO MC

很多朋友对SWF加载SWF的问题概念不太清楚.下面,我用一个简单的例子来讲一讲关于影片的加载的一些问题.(纯属个人经验之谈.有出错的地方.请各位多多指点.)

先把被加载片准备好.也就是乙片了.这部片子是一个桢动画影片.第一桢上写着AS:stop(),现在我们要用甲片来调用它,并让甲片来控制它,让它执行播放的命令.

提供给新片加载的方法有三个类支持.第一类,MovieClip类.第二类,MovieClipLoader类.第三类,Loader类.
用第一类加载MC时要用到loadMovie()和loadMovieNum()方法_framesloaded和_totalframes这两个属性.
在甲片中建立一个加载用的空白MC.实例名为ML.因为乙片就要被加载到那里面去.所以,它的位置决定了乙片的位置.再建立一个用来显示进度用的实例名为PRO的长条形状的MC.
现在我们在主场景第一桢上写上AS:

checked=false//定义一个"保险丝变量",呵呵,我这么称呼来着.
onEnterFrame=function(){
trace(ML._framesloaded/ML._totalframes)//显示下载百分比
PRO._xscale=100*ML._framesloaded/ML._totalframes//可视化下载百分比
if(checked){//"保险丝"断了后的处理
if((ML._framesloaded/ML._totalframes)==1){ML.play();trace("ok");delete this.onEnterFrame}}
if(!checked){checked=true;trace(checked)}//切断"保险丝"
}
ML.loadMovie("http://lunar/a.swf")//’ target="_blank" >http://lunar/a.swf")//加载影片.
//这里加入保险丝的作用就是消除onEnterFrame事件的.尽管在这个例子中它处理的数据不多.但是有一个原则就是尽量减小播放器播放时的负荷.所以,少写几个_root.少用几次onEnterFrame事件是很有必要的.不需要的时候就一般要清除.这里又用到我最喜欢的"自毁"的方法了.

用第二个类和第三个类是专门来加载外部资源的.它们的所有方法和属性都可以用到.只要你觉得有必要.而其中的第二个类,MovieClipLoader更是全面支援外部MC的加载.
还是刚刚的例子.在主场景第一桢上加AS:

var mcl = new MovieClipLoader();//定义一个新的MovieClipLoader对象
Lis = new Object();//建立一个名为LIS的新对象,用作侦听器
Lis.onLoadInit = function() {//侦听MovieClipLoader的loadInit事件.即,下载完成后,播放了第一桢后.
ML.play():}//出现这一事件的相关操作是,让本来停止在第一桢的乙.SWF开始播放.
Lis.onLoadProgress =function(ML ,xx ,yy ) {//桢听MovieClipLoader的loadProgress事件.即,"还在下载中"这一事件.后面的三个参数分另代表,目标,已下载字节量,总字节量.这一点与MovieClip类_framesLoaded是有分别的.一个是以字节作单位,一个是以桢数作单位.
PRO._xscale=100*xx/yy }//可视化进度条的显示
Lis.onLoadComplete = function ()//侦听MovieClipLoader的loadInit事件.即,下载完成后,播放了第一桢后.
{ML.play()}//下载完成就播放,注意这和上面的loadInit事件的区别,一个是播放完第一桢后的事件.一个是下载完成后立即执行的事件.你可以根据情况选择合适的用法.
mcl.loadClip("http://lunar/a.swf","ML")//’ target="_blank" >http://lunar/a.swf","ML")//加载的SWF文件内容以及加载的目的地.
mcl.addListener(Lis);//将侦听器LIS注册给MovieClipLoader对象

这是基本的用法.还有其它用法,请查阅FLASH MX 2004 PRO的帮助文档
最后一个类,loader类.也就是利用loader组件了.从组件栏里将loader组件拖至实例库中.
再主场景中第一桢写上AS:

createClassObject(mx.controls.Loader, "loader", 1);//将loader组件加载到场景中.实例名定为loader.
loader.autoLoad = false;//如果你要调用外部文件,而又没有设contentPath这一属性的值的话.先把这一句加上.其值为真表示自动加载.先前得定义contentPath.如果其值为假表示不自动加载.而等待load事件.无load事件将不会执行其它操作.默认情况下为真.
LLis = new Object();//定义新对象用于loader组件的对象的事件侦听器.
LLis.progress = function(){ //下载中事件发生时的相关操作
PRO._xscale=loader.percentLoaded//可视化进度条显示
trace(loader.percentLoaded+"% loaded.");} // 跟踪加载进程
loader.scaleContent=false;//窗口适应与否.为真表示加载影片大小以适应loader进行放缩;为假,表示不做放缩处理.
loader.contentPath="http://lunar/a.swf";//’ target="_blank" >http://lunar/a.swf";//定义加载文件路径
loader.load();//开始加载.如果上面的autoLoad值为真,这一句便可省略.
loader.addEventListener("progress", LLis);//把侦听器注册给Loader组件对象
LLis.complete = function(){loader.stop()}
loader.addEventListener("complete", LLis);

loader组件常于ProgressBar组件一起联用.这一个组件是专门用来显示进度的
从组件库中拖一个ProgressBar组件入场景,如果不读取它的数据,则其实例名可以为空.
直接在其属性面板修改,source的值为对应为loader组件的实例名.例如上面的loader组件的实例名loader
如果要显示前两个例子就要把ProgressBar组件做一点小小的修改.首先为其定义一个实例名.比如:PB,再将mode设为manual(手动)方式.定义一个逐桢事件处理器.定期使用ProgressBar组件的setProgress(loaded,total)方法来更新进度条.
比如第一个类:

在onEnterFrame事件处理函数中补上一句:
pBar.setProgress(mm._framesloaded, mm._totalframes);

第二个类:
在onLoadProgress事件处理函数中补上一句:

pBar.setProgress(xx, yy);

这样,就直接可视化了进度显示.
有关ProgressBar组件的相关操作,请查阅FLASH MX 2004 PRO的帮助文档

以上就是本人对加载MC的一点点经验.用停止,播放桢的简单例子来说明.
数据的传送也是同样的道理.不过要注意一点.如果被加载的影片里面有"_root"这样的字眼儿存在.那你最好在被加载的SWF文件的源程序文件中加上:_lockroot = true;否则可能会出错.
所以呢,现在就养成尽量少写_root而用_parent和this做替换的习惯吧.
就这样了

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。