ActionScript 3.0实例——Loading

ActionScript 3.0做Loader似乎有点麻烦,但肯定比ActionScript 2.0更强大。下面这个实例在用百分比显示进度的基础上,使用BitmapData类结合Timer类实现图片像素溶解出场,并为图片添加dropShadow和Bevel滤镜。当图片像素溶解到一半的时候,将移除下载状态的提示信息文本。代码如下:

package com.riafan.tutorials {
	import flash.text.*;
	import flash.display.*;
	import flash.events.*;
	import flash.filters.*;
	import flash.net.URLRequest;
	import flash.utils.Timer;
	import flash.geom.*;
	public class LoaingDemo extends MovieClip {
		private var bitmapData:BitmapData=new BitmapData(600,450,true,0xFFFFFFFF);
		private var sourceBitmapData:BitmapData=new BitmapData(600,450,true,0xFFFFFFFF);
		private var loader:Loader=new Loader();
		private var tf:TextField;
		private var rec:Rectangle=sourceBitmapData.rect;
		private var randomSeed:uint=0;
		private var times:uint=30;
		private var numberOfPixels:uint=(rec.width*rec.height)/times;
		public function LoaingDemo() {
			//滤镜应用
			var dropShadowFilter:DropShadowFilter=new DropShadowFilter();
			var bevelFilter:BevelFilter=new BevelFilter();
			loader.filters=[dropShadowFilter,bevelFilter];
			//指定bitmap images
			var bitmap:Bitmap=new Bitmap(bitmapData);
			addChild(bitmap);
			//添加TextField
			tf=new TextField();
			addChild(tf);
			//初始化TextField
			tf.text="开始下载";
			tf.selectable=false;
			tf.autoSize = TextFieldAutoSize.CENTER;
			tf.background=true;
			tf.backgroundColor=0xFFFFCC;
			tf.textColor=0x000000;
			tf.x=(550-tf.width)/2;
			tf.y=(400-tf.height)/2;
			//下载图片
			var req:URLRequest=new URLRequest();
			req.url="flower.jpg";
			loader.load(req);
			//为LoaderInfo对象注册侦听器
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);
		}
		//正在下载时执行
		private function onProgress(e:Event):void {
			var info:LoaderInfo=e.target as LoaderInfo;
			var percent:int=((info.bytesLoaded)/(info.bytesTotal))*100;
			tf.text="已经下载"+percent.toString() + "%";
			tf.textColor=0x009900;
		}
		//下载完毕后执行
		private function onComplete(e:Event):void {
			var matrix:Matrix=new Matrix(.5,0,0,.5,19,8);
			sourceBitmapData.draw(loader,matrix);
			//stage应用
			loader.x=(stage.stageWidth-loader.width)/2;
			loader.y=(stage.stageHeight-loader.height)/2;
			tf.text="下载完毕";
			tf.textColor=0x000000;
			//timer应用
			var timer:Timer=new Timer(60,times);			//注册time侦听器
			timer.addEventListener(TimerEvent.TIMER,onTimer);
			timer.start();
		}
		//下载出错时执行
		private function onError(err:IOErrorEvent):void {
			tf.text=err.text;
			tf.textColor=0x990000;
		}
		//当Timer对象达到指定的延迟间隔时执行
		private function onTimer(e:TimerEvent):void {
			//像素溶解特效
			randomSeed=bitmapData.pixelDissolve(sourceBitmapData,rec,new Point(0,0),randomSeed,numberOfPixels);
			//当图片像素溶解到一半的时候,移除下载状态的提示信息文本
			if (e.target.currentCount==times/2) {
				removeChild(tf);
			}
		}
	}
}

点击此处查看效果。

说明:

  • ActionScript 3.0中的Loader类与ActionScript 2.0的MovieClipLoader类相似。注意:注册侦听器时是为LoaderInfo对象注册而非Loader实例本身。
  • 在ActionScript 3.0中Timer类已经取代了setInterval命令,它不但可以设置延迟的时间、执行的次数,还可以控制定时器的开始、停止和重置。
上一篇上一篇: Flash CS3 新增组件——Slider
下一篇下一篇: Flex 2中文教程
来自文章来自: 本站原创
引用引用通告: 查看所有引用 | 我要引用此文章
标签Tags: Actionscript3 Class
相关相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭