AS3 - 雪花飘舞效果
这是一个纯AS写的简单的flash动画效果。


代码如下:
--- winter.as ---
--- Snow.as ---
在线试玩:
开始动态创建大小不一,透明度不一的雪花在舞台上。同时根据鼠标的偏移量,雪花会进行飘动并有模糊效果。
效果图如下:



--- 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); } } }
在线试玩: