早看到你这个帖子里,不过前不久的项目遇到这个问题,这里吧自己的方法共享出来,大家学习一下!
测试地址:
http://www.mococo.cn/test/loading_example.swf
制作讲解:
首先做一个loading 类,包含三个方法,install,refresh,remove
复制内容到剪贴板
代码:
/*
*
* Autor: Martin.Mao
* Email/MSN: im@mococo.cn
* QQ: 183654371
*
*/
import flash.filters.BlurFilter;
import mx.behaviors.DepthControl;
import mx.transitions.Tween;
import mx.transitions.easing.*;
class cn.mococo.utils.loading {
static var __loadingMC:MovieClip;
/*
* @ install(x:Number, y:Number):Void
* @ 添加loading到舞台,坐标为x:Number, y:Number
*/
static function install(x:Number, y:Number):Void {
if ( !__loadingMC._visible ){
//if ( !_level0.myloading._visible ){
//将loading动画添加到场景
__loadingMC = _level0.attachMovie('loadding_mc', 'myloading', _level0.getNextHighestDepth(), { } );
}else {
__loadingMC._visible = !__loadingMC._visible;
}
__loadingMC._x = x;
__loadingMC._y = y;
//初始化进度文字
__loadingMC.per.text = '0% loaded';
//初始化进度条
__loadingMC.rateMC._xscale = 0;
}
/*
* @ reFresh(num:Number):Void
* @ 更新进度条及进度数字
*/
static function refresh(num:Number):Void {
//修改百分比数字
DepthControl.bringToFront(__loadingMC);
__loadingMC.per.text = num + '% loaded';
//修改进度条
//trace(__loadingMC.rateMC._width);
trace(__loadingMC.rateMC._xscale);
__loadingMC.rateMC._xscale = num;
}
/*
* @ remove():Void
* @ 卸载loading
*/
static function remove(method:String, direc:String, speed:Number):Void {
trace('method : ' + method);
if ( method == 'Elastic' ) {
var lY = __loadingMC._y;
var lX = __loadingMC._x;
if ( direc == 'left' ) {
var del_loading:Tween = new Tween(__loadingMC, '_x', Elastic.easeIn, lX, lX - Stage.width * 2, speed, true);
}else if ( direc == 'right' ) {
var del_loading:Tween = new Tween(__loadingMC, '_x', Elastic.easeIn, lX, lX + Stage.width, speed, true);
}else if ( direc == 'top' ) {
var del_loading:Tween = new Tween(__loadingMC, '_y', Elastic.easeIn, lY , lY - Stage.height, speed, true);
}else if ( direc == 'bottom' ) {
var del_loading:Tween = new Tween(__loadingMC, '_y', Elastic.easeIn, lY , lY + Stage.height, speed, true);
}
}else if ( method == 'Strong' ){
var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
__loadingMC.per.filters = [txt_blur];
var del_loading:Tween = new Tween(__loadingMC, '_alpha', Strong.easeInOut, 100, 0, speed, true);
var del_loading_per:Tween = new Tween(__loadingMC.per, '_alpha', Strong.easeOut, 100, 0, speed, true);
}
del_loading.onMotionFinished = function() {
__loadingMC._visible = false;
}
}
}在flash文件中自己要做一个共用的 loading 叫 loadding_mc,做好滚动条和加载百分比文本框,分别叫 'rateMC' 和 'per', 和上面class中对应;
在flash中使用时,先导入类 ==> 然后安装我们统一使用的loading(设置坐标) ==> 然后在加载过程中refresh(数字)百分比 ==> 加载完成remove();
在remove中按照参数的组合有多种来 disappear;大家可以看到 remove(method:String, direc:String, speed:Number);
使用如下方法:
复制内容到剪贴板
代码:
loading.remove("Elastic", "left", 2); // loading向左回弹,消失,速度为2
或
loading.remove("Elastic", "right", 2); // loading向右回弹,消失,速度为2
或
loading.remove("Elastic", "top", 2); // loading向上回弹,消失,速度为2
或
loading.remove("Elastic", "bottom", 2); // loading向下回弹,消失,速度为2
或
loading.remove("Strong", "", 2); // loading透明度逐渐转为0,消失,速度为2我们做个比方,在舞台上有一个叫 img_mc 的空剪辑要加载一个图片或者一个flash,加载前或加载开始install共用loading动画,加载完毕卸载loadiing;
复制内容到剪贴板
代码:
import cn.mococo.utils.loading;
//建立容器my_img_mc,设置好位置
var img_mc:MovieClip = this.createEmptyMovieClip("my_img_mc", this.getNextHighestDepth());
img_mc._x = 10;
img_mc._y = 10;
//安装 loading
loading.install(50,50);
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadProgress = function(target_mc:MovieClip, numBytesLoaded:Number, numBytesTotal:Number):Void {
var pctLoaded:Number = Math.ceil(100 * (numBytesLoaded / numBytesTotal));
loading.refresh(pctLoaded);
}
//加载成功后移除loading;
listener.onLoadComplete = function(){
loading.remove("Elastic", "right", 2);
//loading.remove("Strong", "", 2);
}
loader.addListener(listener);
loader.loadClip("http://www.mococo.cn/20080412%20Laser%20CS/images/P4120020.jpg", img_mc);总结:
每当要使用loading时,先install,加载时refresh,加载完成remove,你看明白了吗?
[
本帖最后由 mococo 于 2008-4-29 20:51 编辑 ]