package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.filters.ConvolutionFilter;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.Timer;
import flash.display.BitmapDataChannel;
import flash.system.System;
public class Test111 extends Sprite
{
private var bitmap:Bitmap;
private var bmpData:BitmapData;
private var filter:ConvolutionFilter = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 30, 1, 1, 1, 1], 38);
private var arrPoint:Array=new Array;//点的数量
private var arrVx:Array = new Array;//点在X方向的速度
private var arrVy:Array = new Array;//点在Y方向的速度
private var arrColor:Array = new Array;//每个点的颜色
public function Test111():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
initImg();
initFunction();
}
private function initImg():void {
bmpData = new BitmapData(550, 400, false, 0x178445);
bitmap = new Bitmap(bmpData);
addChild(bitmap);
}
private function initFunction():void {
var timer:Timer = new Timer(20);
timer.addEventListener(TimerEvent.TIMER, addPoint);
timer.start();
this.addEventListener(Event.ENTER_FRAME, onFrame);
}
private function addPoint(evt:TimerEvent):void {
var point:Point = new Point;
var Vx:Number;
var Vy:Number;
var color:uint;
if (int(Math.random()*2)==0) {
color = 0xffffff;
}else {
color = 0x00aaaa;
}
point.x = Math.random() * 100 + 100;
point.y = 100;
var speed:Number = Math.random() * 0.9 +0.1;
var angle:Number = Math.PI / 6;
arrPoint.push(point);
Vx = Math.cos(angle) * speed;
Vy = Math.sin(angle) * speed;
arrVx.push(Vx);
arrVy.push(Vy);
arrColor.push(color);
}
private function onFrame(evt:Event):void {
for (var i:int = 0; i < arrPoint.length;i++) {
if (arrPoint[i].y >= 300) {
var f:Number = Math.random() / 50;
var speed:Number = Math.random() * 0.9 +0.1;
var angle:Number = Math.PI / 6;
var Vx:Number = Math.cos(angle) * speed;
var Vy:Number = -Math.sin(angle) * speed;
Vx += f;
arrPoint[i].x += Vx;
arrPoint[i].y += Vy;
if (arrPoint[i].x > 350) {
arrPoint.splice(i, 1);
arrColor.splice(i, 1);
arrVx.splice(i, 1);
arrVy.splice(i,1);
}
}else {
arrPoint[i].x += arrVx[i];
var g:Number = Math.random() / 50;
arrVy[i] += g;
arrPoint[i].y += arrVy[i];
setColor(arrPoint[i].x, arrPoint[i].y, arrColor[i]);
}
}
bmpData.applyFilter(bmpData, new Rectangle(0, 0, 550, 400), new Point(0, 0), filter);
}
private function setColor(x:Number,y:Number,c:uint):void {
bmpData.setPixel32(x,y,c);
}
}
}
粒子 瀑布
最新推荐文章于 2020-03-19 11:31:26 发布