Flash叠加模式blendMode

通过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效果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西溪漫步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值