通过Flash的blendMode,再结合EnterFrame事件,可以实现很多有趣的效果,以下就是一个小例子,我把它叫做五彩斑斓(很多气泡在飞舞,每个气泡是一个经过blendMode后的渐变填充圆):
1、新建一fla文件Colorful。
2、新建一as文件Colorful,并与fla文件关联。
3、新建一as文件Ball。
Ball.as:
package
{
import flash.display.GradientType;
import flash.display.Sprite;
import flash.geom.Matrix;
public class Ball extends Sprite
{
//振幅
public var swings:Number = 0;
//角度
public var angles:Number = 0;
public function Ball(color:int=0xffffff,swing:Number=10,angle:Number=-1)
{
swings = swing;
angles = angle;
var colors:Array = [0xffff00,0x000000];
colors[0] = color;
var alphas:Array = [1,0];
var ratios:Array = [0,255];
var matrix:Matrix = new Matrix ;
matrix.createGradientBox(100,100,0,-50,-50);
graphics.beginGradientFill(GradientType.RADIAL,colors,alphas,ratios,matrix);
graphics.drawCircle(0,0,50);
graphics.endFill();
}
}
}
Colorful.as
package
{
import flash.display.Sprite;
import Ball;
import flash.events.Event;
public class Colorful extends Sprite
{
private var balls:Array = [] ;
private var ballnum:int = 100;
private var ballcolor:Array = [0x0099ff,0x66ff99,0xccff00,0xccccff];
private var speed:Number = 0.05;
public function Colorful()
{
init();
}
public function init():void
{
this.graphics.beginFill(0x0,1);
this.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
this.graphics.endFill();
for (var i:int=0; i<ballnum; i++)
{
var n:int = Math.random() * ballcolor.length;
var ball:Ball = new Ball(ballcolor[n],Math.random() * 20,1 - Math.random() * 3);
ball.blendMode = "add";
ball.cacheAsBitmap = true;
addChild(ball);
ball.x = Math.random() * stage.stageWidth;
ball.y = Math.random() * stage.stageHeight;
ball.height = ball.width = ball.width * Math.random() + 35;
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
public function onEnterFrameHandler(event:Event):void
{
for (var i:int =0; i<ballnum; i++)
{
balls[i].y -= balls[i].height / 10;
balls[i].x += Math.sin(balls[i].angles) * balls[i].swings;
balls[i].angles += speed;
if (balls[i].y + balls[i].height / 2 < 0)
{
balls[i].y = stage.stageHeight + balls[i].height / 2;
balls[i].x = Math.random() * stage.stageWidth;
balls[i].swings = Math.random() * 10;
}
else if (balls[i].x - balls[i].width / 2 > stage.stageWidth)
{
balls[i].x = 0 - balls[i].width / 2;
}
else if (balls[i].x + balls[i].width / 2 < 0)
{
balls[i].x = stage.stageWidth + balls[i].width / 2;
}
}
}
}
}
Ctrl+Enter效果如下: