本类搜索:

loadMovie命令详解

2008-5-20 17:51:32 作者: lgf 来源: 金龙网站设计工作室

问题一:如何控制被加载进来的SWF文件的坐标和长宽比例大小?

控制被加载进来的SWF文件控制其长宽要采用onEnterFrame,比如:

on (press) {
loadMovie("a2.swf", "_root.mymc");
onEnterFrame = function () {
_root.mymc._x = 0;
_root.mymc._y = 0;
_root.mymc._width = 330;
_root.mymc._height = 240;
};
}

为什么用 onEnterFrame呢?因为被加载进来的的过程中,有点延时,如果没有onEnterFrame语句,那么语句读取一次就不读取了,然而读取了这一次之后,还没有加载进来,所以就会导致坐标大小设置无效。同样,如果加载到层上,也是这样的。

on (press) {
loadMovie("a1.swf", 1);
onEnterFrame = function () {
_level1._x = 17;
_level1._y = 30;
_level1._width = 330;
_level1._height = 240;
};
}

请注意这两种方法,第一种,把外部的a2加载到mymc中,加在进来后,a2就自动的替换了mymc,我们直接设置mymc的属性就设置了被加载进来的swf的属性。第二种方法,_level是对于加载到时间轴上的电影的引用,加载到第2层就是_level2;加载到第3层就是_level3。

问题之二:如何实现点击按钮加载一个外部SWF文件,并且要显示加载的下载进度呢?

有两个方法来实现这个效果,其一:把加载londing写在主文件中,其二,被加载的子SWF文件有自己的londing。现在分别给予说明。

其一:在主文件中写londing

外部子swf文件名为a1,主文件中有一个动态文本框名为loadText,一个按钮名为bbt,现在把loadMovie和londing写在桢上。

_root.bbt.onPress = function() {
_root.createEmptyMovieClip("mc", 10);
mc.loadMovie("a1.swf");
mc._visible = false;
_root.bbt.onEnterFrame = function() {
var l = mc.getBytesLoaded();
var t = mc.getBytesTotal();
var getPercent = l/t;
loadText = Math.round(getPercent*100)+"%";
if (l>0 && l>=t) {
mc._visible = true;
delete this.onEnterFrame;
}
mc._x = 10;
mc._y = 10;
mc._width =440;
mc._height = 320;
};
};

其二:子文件中有自己的londing

这个写法与前面说的londing一样,只是注意一个问题就是注意路径的问题,比如这样写:

第一祯

loaded = getBytesLoaded();
total = getBytesTotal();
lts = Math.round((loaded/total)*100);
wenben = lts+"%";

第二祯

if (lts == 100) {
gotoAndStop(3);
} else {
gotoAndPlay(1);
}

和前面的londing中介绍的比较,看出不同之处没有呢?仅仅是去掉了_root因为被加载后,外部SWF文件就相当于主文件中的一个MC 有了_root 就是指向主文件的_root 了,当然会显示错误。

问题三:我想在舞台上画一个屏幕,然后点击一个按钮就载入一个外部swf进行播放该怎样做呢?

那么我们就来一起做一个相册吧。当主文件载入后,单击按钮就载入一个外部swf 文件,并且都有londing显示。首先我们做好以下准备工作:(1)准备几张图片,现在我们准备7张,6个子文件一个一张,主文件用一张。(2)主文件舞台大小为了适应网页的需要,设置为770*420。子文件舞台大小设置为512*384,这样就不需要载入后控制大小了,方便些(其实我们应当这样,省去一些麻烦。

一、制作子文件。每个都用来显示图片,第一和第二祯写londing,第三祯~~二十祯根据自己的爱好做点亮度变化,以产生动感,最后一祯写上stop()。第一和第二祯的londing如下

第一祯

loaded = getBytesLoaded();
total = getBytesTotal();
lts = Math.round((loaded/total)*100);
wenben = "数据下载中 "+lts+"%";

第二祯

if (lts == 100) {
gotoAndPlay(3);
} else {
gotoAndPlay(1);
}

就这样如法炮制的制作6个,分别命名为b1…..b6都发布成swf文件。保存在一个文件夹中。

二、制作主文件

第一祯用来写londing,第2祯放一些像屏幕一样的东西,和按钮,为了增加效果,放一个音乐在时间轴上。

第一祯的londing//由于前面已经说得多了,就不赘述了

stop();
i = 0; ,
onEnterFrame = function () {
// 使用不断触发的事件
loaded = _root.getBytesLoaded();
total = _root.getBytesTotal();
var aa = Math.round((loaded/total)*100);
_root.dongtai.wenbens = aa+"%";
_root.dongtai._x = 188+aa*3;
_root.bb._width = aa*3;
if (aa>=100) {
// 检测到满足条件就跳出来,否则继续循环
_root.gotoAndStop(2);
delete this.onEnterFrame;
// 使用delete的目的是当完成下载后销毁onEnterFrame事件,以节约资源的消耗。
}
};

第2祯的按钮上的AS

on (press) {
_root.i++;
if (i == 7) {
i = 6;
}
loadMovie("b"+i+".swf", "_root.mc");
_root.tishi = "第"+i+"张图片";
}

偷点懒,就不详细的赘述其含义, 我们也可以用很长的语句来实现相同的效果,这种写法是对AS的一种浓缩。

具体情况请参看原文件。

问题四:我想逐次载入多个外部文件,当第一个载入播放完毕后,立即载入第2个,第二个播放完毕后,立即载入第3个 ,……,直到结束。怎么办?

首先对这种提问,我们先要质问一下提问的人,这样做有什么意义? 与其这样,不如全部做到一个SWF中,因为每次调用一个外部SWF的时候,需要一定的时间来等待下载。当然,如果你想制作一个连续剧,播放完了一个后,用londing下一集的londing画面显示“正在载入下集,请稍候”那么还是可以的。

方法很简单:依照问题三的原文件,稍微修改,去掉一个按钮,用一个按钮载入第一个,然后再第一个的最后一祯放个调用主文件中的函数即可。

按钮:

on (press) {
loadMovie("b1.swf", "_root.mc");
}

主文件定义的函数

function go2() {
loadMovie("b2.swf", "_root.mc");
}
function go3() {
loadMovie("b3.swf", "_root.mc");
}
function go4() {
loadMovie("b4.swf", "_root.mc");
}
function go5() {
loadMovie("b5.swf", "_root.mc");
}
function go6() {
loadMovie("b6.swf", "_root.mc");
}

第一个b1 SWF的最后一祯_root. go2(),第二个外部SWF的最后一祯 _root.go3()………..

[在线编辑:lgf][打印本页][收藏本页][关闭本页]
免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有异议,请联络本站!
转载要求:文章作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站地址,且不准打上各自站点的水印。
本类最新
关于我们  |  广告服务  |  版权声明  |  支付方式  |  联系我们  |  建站流程  |  网站导航  |  加入收藏
网站合作、内容监督、商务咨询、投诉建议:13459049164

本站关键词:厦门网站建设,厦门网站设计,赣州网站建设,赣州网站设计,厦门网站建设工作室,厦门网站设计工作室
Copyright©2008-2009厦门金龙网站设计工作室(网站建设)版权所有
赣ICP备08000130号
赣ICP备08000130号