最近一直忙碌公司的工作,每个周末都很少时间来写博客。最近做了一些实验,记录下来,这种小特效不算很华丽,不过用到在项目当中也是有一点小小意思。
这个特效从一个小球开始的。通过小球运动产生一种比较简单的视角效果。
下面,来试试这种效果,我们先定义一个小球类。
package { import flash.display.Sprite; import flash.geom.*; import flash.display.GradientType; public class Ball extends Sprite { public var speed:Number; public function Ball() { this.graphics.beginFill(0xffffff); this.graphics.drawCircle(0,0,1); this.graphics.endFill(); var matrix:Matrix = new Matrix(); matrix.createGradientBox(10, 10, 0, 0, 0); var colors:Array = [0xCCFF00,0xCCFF00]; var alphas:Array = [0,255]; var ratios:Array = [0,0xFF]; this.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix); this.graphics.drawCircle(0,0,2); this.graphics.endFill(); } } }
这个特效的基本思路是:创建一堆的小球,最开始初始他们的随机速度,然后匀速运动,当达到一个预设位置的时候,移除显示列表,并进行删除对象。
创建的粒子对象,只进行向上的运行路线,运动过程,透明度递减,产生一种消失的效果。而对z轴随机也可以产生一种视角的变化,产生一种空间感。
改变预设的初始属性,如速度,等等可以让小球的运动变化更多。
import flash.events.Event; import flash.display.Sprite; var pixSprite:Sprite=new Sprite(); addChild(pixSprite); var list:Array = []; for (var i:int=0; i<500; i++) { var ball:Ball=new Ball(); ball.x = Math.random() * 80; ball.y = Math.random() * 100; ball.z = Math.random() * 200; ball.speed = Math.random() * 5 + 1; pixSprite.addChild(ball); list.push(ball); } pixSprite.x=(stage.stageWidth-pixSprite.width)*0.5; pixSprite.y=(stage.stageHeight-pixSprite.height)*0.5; addEventListener(Event.ENTER_FRAME,onRun); function onRun(event:Event):void { var len:int = list.length; for (var i:int=0; i<list.length; i++) { var ball:Ball = list[i] as Ball; if (ball) { ball.y -= ball.speed;//向上运动 ball.alpha -= 0.02; var dir:int = Math.random() > 0.5 ? 1:-1; ball.z -= Math.random() * 20 * dir; if (ball.y < -60) { if (pixSprite.contains(ball)) { pixSprite.removeChild(ball); ball = null; } list.splice(i,1); } } } if (list.length == 0) { removeEventListener(Event.ENTER_FRAME,onRun); } }
好,不妨尝试一下,实验制作这种效果。