粒子 瀑布

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);
			
			
			
		}
		
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值