
- 本栏最新文章
- Flash AS实例教程:简单的loading 04-02
- 一个很头痛的SWF加载问题 04-01
- 用Flash去创作什么? 04-01
- 精简Flash文件体积的几个小技巧 04-01
- Flash简单实现网页中的Flash动画全屏 04-01
- flash与后台的交互 04-01
- flash缓入缓出运动 04-01
- Flash AS制作上升的水泡效果动画 03-31
- AS柔化函数(解决马赛克) 03-31
- flash+webservice 乱码问题解决一例 03-31

- 本栏推荐文章
- Photoshop教程:水灵灵的美女调出来 12-30
- AS3与后台交互 12-21
- AS3通俗教程---AS3自身loading制作 12-19
一步一步学ActionScript 2.0(二十四)
外部swf、jpeg文件的装载
[学习目标]:
1、掌握外部swf、jpeg文件的装载方法,真正理解loadMovie() 、loadMovieNum() 的区别。
2、掌握层级的概念。
3、掌握外部swf、jpeg文件装载后的属性控制方法
4、对照onEnterFrame这个事件函数理解setInterval()在loading中的作用。
在上讲给大家介绍了loading的制作原理和方法,其实虽然loding的样子很花哨,但基本as是不变的。现在给大家结束MC的另外的方法loadMovie() ,当然这里不局限在mc的方法上,因为还有全局函数可以完成同样的事情。在这里我就一起讲下,当然对于as2.0来说,用自定义类更好些,不过在没有给大家说自定义类的方法前,我还是不用类了。
准备从下面几个方面介绍:
①用到的函数和方法
②层级的概念
④loadMovie() 、loadMovieNum() 的区别
⑤加载外部swf文件后,注册点问题
⑥加载下载进度的显示
⑦加载外部swf文件后,属性的控制
没有完。。最近事情多,在写
外部swf、jpeg文件的装载
[学习目标]:
1、掌握外部swf、jpeg文件的装载方法,真正理解loadMovie() 、loadMovieNum() 的区别。
2、掌握层级的概念。
3、掌握外部swf、jpeg文件装载后的属性控制方法
4、对照onEnterFrame这个事件函数理解setInterval()在loading中的作用。
在上讲给大家介绍了loading的制作原理和方法,其实虽然loding的样子很花哨,但基本as是不变的。现在给大家介绍MC的另外的方法loadMovie() ,当然这里不局限在mc的方法上,因为还有全局函数可以完成同样的事情。在这里我们就一起讲下,当然对于as2.0来说,用自定义类更好些,不过在没有给大家说自定义类的方法前,我们还是不用类了。
一般情况下,flash播放器仅能播放一个swf文件,但是很多情况下,需要同一个作品中播放更多的swf文件,比如我们做纯flash的网站,如果用一个swf文件,太大了,我们可以通过导航,装载其他的swf文件,另外,一些没源文件的AS效果动画,我们也可以调用成为自己作品的一部分。所以外部swf和jpeg文件的装载应用特别的广泛,是我们学as必须掌握的东西。
一、用到的函数和方法
在实现外部swf文件的装载一般有3个方法,其实就是4种函数或者方法罢了。
1、MC的方法: MovieClip.loadMovie()
方法 说明
MovieClip.loadMovie() 将指定的 SWF 文件加载到影片剪辑中。
MovieClip.unloadMovie() 删除用 loadMovie() 加载的 SWF 文件。
比如,我们把fish.swf装载到MC元件load_mc,可以这样:load_mc.loadMovie("fish.swf") ,如果卸载可以这样写:load_mc.unloadMovie();很简单吧。
2、全局函数loadMovie()、loadMovieNum()
函数 功能
loadMovie("url",target [, method]) 在播放原始 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中目标影片剪辑的路径
unloadMovie(target) 从 Flash Player 中删除通过 loadMovie() 加载的影片剪辑
loadMovieNum("url",level [, variables]) 在播放原来加载的 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中的某个层级。
unloadMovie(target) 从 Flash Player 中删除通过 loadMovieNum() 加载的影片
如:
loadMovie("01.swf", _root.load_mc) ;
loadMovie("http://www.abc.com/01.jpg", _root.load_mc) ;
loadMovieNum("01.swf", 100);
unloadMovie ("_root.load_mc");
unloadMovieNum(100);
两者的区别:loadMovie适宜加载到指定的某个MC目标;loadMovieNum适宜加载到某个层次级别。
3、MovieClipLoader类的loadClip()
这个是新增加的类,这个类功能强大呀,有侦听机制,很方便装载进度的实现,完成可以代替上面的2个全局函数,后面我们用一讲专门介绍。
二、层级的概念
loadMovieNum()这个函数有个参数:level ,是装载的swf、jpeg文件放置的层级,那什么是层级呢?
对于同一时间轴上的层叠关系我们前面给大家讲了深度的概念,在外部swf文件通过loadMovieNum()装载到播放器也存在着层叠关系,这个层叠关系我们用层级来表示,我们知道每个Flash动画都有一个主时间轴,这个主时间轴就被FlashPlayer预置为最高级也就0级(_level0),如果用loadMovieNum()装载其他swf文件,我们可以让他放在不同的级,分别用些整数表示。这些整数就是层级,表示了不同的主时间轴的层叠关系,每个层级就是一个独立的主时间轴,好象一个独立的加工厂,可以拥有自己的MC。并且不同的层级同时运行着,互不干扰,是个平行关系,级别大的在最上面,也就是里我们观察动画的人最近。对于不同层级的MC对象的调用,我们可以用他们所在的层级来实现,比如有个fish.swf加在了200级,那我们可以这样_level200.stop();就是在级别前加个_level。大家可以通过下图理解:
上面的level0就是_root,每个层级就是个匣子,可以有自己的MC,级别大,越靠上。使用中,层级不需要连续的。
三、加载外部swf文件后,注册点、属性问题
如果用"loadMovieNum()"加载到主场景中(level0),那么,外部swf文件将取代原动画内容,它的位置对准场景的左上角,如果加载到其它层次比如(leve288),那么原动画内容不受影响,位置同上。
如果用"loadMovie()"加载到某个MC对象时,被加载swf文件的左上角对准该MC对象的"注册点",所以,用这样的方法可以准确控制被加载swf的位置。
并且,loadMovie()的过程是先将影片中的原mc删除,这个过程会删除mc关联的一切外部as,比如_root.mc.onEnterFrame = function(){},然后将新mc加载进来,并继承原mc的一切内部属性(比如内部as,位置、旋转和缩放属性),但是注意这个过程并不会继承原mc的外部as。这就是为什么我们在loadMovie()的同时写_root.mc.onEnterFrame会失效的原因。解决的方法最好使用MovieClipLoader类来监听mc是否加载完成,加载完成后再写_root.mc.onEnterFrame。,原MC对象被加载swf文件替代,而且一旦卸载后原MC仍不可见,但它确实仍存在,你可连续加载。
注意的问题,属性的控制必须加载完成后才起作用的。
四、setInterval()的使用
setInterval() 是播放 SWF 文件时,每隔一定的时间,就调用函数、方法或对象,相当于一个时间控制器。可以使用本动作更新来自数据库的变量或更新时间显示。setInterval动作的语法格式如下:
setInterval(function,interval[,arg1,arg2,......argn])
setInterval(object,methodName,interval[,arg1,arg2,.....argn])
当需要把动作取消时,只要clearInterval( intervalID )就可以了。
需要注意的是:
①setInterval的函数必须要使用updateAfterEvent()来刷新显示效果。
②setInterval所设置的执行时间间隔并非按照你设置的间隔精确执行,一般都有几毫秒的误差。
③setInterval最多在一帧的时间里执行10次左右。
五、演示实例
要求:演示各个函数或方法完成swf、jpeg文件的装载,并改变装载后的属性。
步骤:这个例子的步骤太多了,我把as代码放在这里,其他的大家下了源码看着自己做一遍,会了这个例子一定可以掌握外部swf、jpg文件的调用的。
1、场景 1:MovieClip.loadMovie()的演示
stop();
load1_btn.onPress = function() {
load1_mc.loadMovie("fish.swf");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
unload1_btn.onPress = function() {
load1_mc.unloadMovie();
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
unload2_btn.onPress = function() {
load2_mc.unloadMovie();
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
load2_btn.onPress = function() {
load2_mc.loadMovie("fish.swf");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load2_mc);
};
next_btn.onPress = function() {
nextScene();
};
checkLoadingStatus = function (objname) {
if (objname) {
var bytesTotal = objname.getBytesTotal();
if (isNaN(bytesTotal) || bytesTotal == 0) {
progress_txt.text = "Loading...";
} else {
var bytesLoaded = objname.getBytesLoaded();
if (bytesLoaded == bytesTotal) {
progress_txt.text = "Loading Complete";
// progress_txt._visible = false;
clearInterval(loadingID);
} else {
progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
}
}
updateAfterEvent();
// 刷新显示效果
}
};
2、场景 2:loadMovie()的演示
stop();
load1_btn.onPress = function() {
loadMovie("loadjpg.jpg", "load1_mc");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
load2_btn.onPress = function() {
loadMovie("fish.swf", "load2_mc");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load2_mc);
};
unload1_btn.onPress = function() {
unloadMovie("load1_mc");
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
unload2_btn.onPress = function() {
unloadMovie("load2_mc");
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
next_btn.onPress = function() {
nextScene();
};
prev_btn.onPress = function() {
prevScene();
};
checkLoadingStatus = function (objname) {
if (objname) {
var bytesTotal = objname.getBytesTotal();
if (isNaN(bytesTotal) || bytesTotal == 0) {
progress_txt.text = "Loading...";
} else {
var bytesLoaded = objname.getBytesLoaded();
if (bytesLoaded == bytesTotal) {
progress_txt.text = "Loading Complete";
// progress_txt._visible = false;
clearInterval(loadingID);
} else {
progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
}
}
updateAfterEvent();
// 刷新显示效果
}
};
3、场景 3:loadMovieNum()的演示
stop();
loadlevel1_btn.onPress = function() {
loadMovieNum("loadjpg.jpg", 100);
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, _level100);
};
loadlevel2_btn.onPress = function() {
loadMovieNum("fish.swf", 200);
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, _level200);
};
unloadlevel1_btn.onPress = function() {
unloadMovieNum(100);
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
unloadlevel2_btn.onPress = function() {
unloadMovieNum(200);
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
next_btn.onPress = function() {
nextScene();
};
prev_btn.onPress = function() {
prevScene();
};
checkLoadingStatus = function (objname) {
if (objname) {
var bytesTotal = objname.getBytesTotal();
if (isNaN(bytesTotal) || bytesTotal == 0) {
progress_txt.text = "Loading...";
} else {
var bytesLoaded = objname.getBytesLoaded();
if (bytesLoaded == bytesTotal) {
progress_txt.text = "Loading Complete";
// progress_txt._visible = false;
clearInterval(loadingID);
} else {
progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
}
}
updateAfterEvent();
// 刷新显示效果
}
};
4、场景 4:继承原来MC的属性演示
play();
load1_btn.onPress = function() {
loadMovie("fish.swf", "load1_mc");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
unload1_btn.onPress = function() {
unloadMovie("load1_mc");
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
prev_btn.onPress = function() {
prevScene();
};
next_btn.onPress = function() {
nextScene();
};
checkLoadingStatus = function (objname) {
if (objname) {
var bytesTotal = objname.getBytesTotal();
if (isNaN(bytesTotal) || bytesTotal == 0) {
progress_txt.text = "Loading...";
} else {
var bytesLoaded = objname.getBytesLoaded();
if (bytesLoaded == bytesTotal) {
progress_txt.text = "Loading Complete";
// progress_txt._visible = false;
_root.loadcfg = true;
clearInterval(loadingID);
} else {
progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
}
}
updateAfterEvent();
// 刷新显示效果
}
};
5、场景 5:改变装载的swf属性的演示
stop();
loadcfg=false;
load1_btn.onPress = function() {
loadMovie("loadjpg.jpg", "load1_mc");
//progress_txt._visible = true;
clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
unload1_btn.onPress = function() {
unloadMovie("load1_mc");
//progress_txt._visible = true;
progress_txt.text = "Unload Complete";
};
onEnterFrame = function () {
if ( _root.loadcfg ) {
with (load1_mc ) {
_x = 350 ;
_y = 100 ;
_alpha=50;
_rotation=30;
_width=400;
}
delete onEnterFrame ;
}
};
prev_btn.onPress = function() {
prevScene();
};
checkLoadingStatus = function (objname) {
if (objname) {
var bytesTotal = objname.getBytesTotal();
if (isNaN(bytesTotal) || bytesTotal == 0) {
progress_txt.text = "Loading...";
} else {
var bytesLoaded = objname.getBytesLoaded();
if (bytesLoaded == bytesTotal) {
progress_txt.text = "Loading Complete";
// progress_txt._visible = false;
_root.loadcfg=true;
clearInterval(loadingID);
} else {
progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
}
}
updateAfterEvent();
// 刷新显示效果
}
};
说明:
1、上面的代码基本是相同的,其中checkLoadingStatus 函数是完成装载进度的,你不要也是可以的。因为如果需要调入的进度显示用MovieClipLoader类更方便的。其他的就是几个按钮的函数了。
2、在你自己做的过程中,你做完第一个场景,其他的进行场景复制,然后修改就可以了
这讲给大家说了swf、jpeg文件的装载方法,大家应掌握的重点loadMovie和loadMovieNum区别、调入后的定位、属性的控制。理解层级到底是什么。把这节的例子自己做一 遍,这样会有助你的理解的。


