当前位置: > > > AS3 - 雪花飘舞效果

AS3 - 雪花飘舞效果

这是一个纯AS写的简单的flash动画效果。
开始动态创建大小不一,透明度不一的雪花在舞台上。同时根据鼠标的偏移量,雪花会进行飘动并有模糊效果。
效果图如下:


 

代码如下:

--- winter.as ---
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.filters.BlurFilter;

	[SWF(backgroundColor="#31C8F3", frameRate="40", width="600", height="200")]
	public class winter extends Sprite {
		//创建BlurFilter类的实例
		private var blur:BlurFilter = new BlurFilter(4, 4, 1);
		
		public function winter() {
			//定义要复制的总数
			var num:int = 20;
			//使用for循环开始复制
			for (var i:int = 0; i<num; i++) {
				//设定随机缩放
				var scale:Number = Math.random()*1;
				//设定随机的_alpha透明度
				var alpha:Number = Math.random()*(1/scale)+0.4;
				//创建并添加雪花
				var temp_mc:Snow = new Snow();
				//指定temp_mc的属性值.
				temp_mc.x =  Math.random()*(stage.stageWidth);
				temp_mc.y =  Math.random()*(stage.stageHeight);
				temp_mc.scaleX = scale;
				temp_mc.scaleY = scale;
				temp_mc.alpha = alpha;
				//针对temp_mc使用onEneterFrame进行循环以使所有的园环沿着光标的反向移动
				temp_mc.addEventListener(Event.ENTER_FRAME,update);
				addChild(temp_mc); 
			}
		}
		
		private function update(e:Event):void {
			var t:Snow = e.currentTarget as Snow;
			var Yspeed:Number = (stage.stageHeight/2-mouseY)/t.scaleY*0.1;
			var Xspeed:Number = (stage.stageWidth/2-mouseX)/t.scaleX*0.1;
			//定义blur.blurX和blur.blurY的值,这个值是根据上面的Xspeed和Yspeed的变化而变化的.
			blur.blurX = Math.abs(Xspeed);
			blur.blurY = Math.abs(Yspeed);
			//指定应用滤镜
			t.filters = [blur];
			//x,y方向的移动和条件限制
			t.y += Yspeed;
			if (t.y>stage.stageHeight) {
				t.y = 0;
			}
			if (t.y<0) {
				t.y = stage.stageHeight;
			}
			t.x += Xspeed;
			if (t.x>stage.stageWidth) {
				t.x = 0;
			}
			if (t.x<0) {
				t.x = stage.stageWidth;
			}
		}
	}
}

--- Snow.as ---
package
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	
	public class Snow extends Sprite
	{
		//包外类测试
		[Embed(source="snow.png")]   //与下面的类关连
		private var IconClass:Class;
		public function Snow()
		{
			var sb:DisplayObject = new IconClass();
			sb.x = -sb.width/2;
			sb.y = -sb.height/2;
			this.addChild(sb);
		}
	}
}

在线试玩:

评论0