六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 38|回复: 0

[转]粒子 瀑布

[复制链接]

升级  50.4%

234

主题

234

主题

234

主题

进士

Rank: 4

积分
752
 楼主| 发表于 2013-1-26 14:46:08 | 显示全部楼层 |阅读模式
package {        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;                /**         * ...         * @author chens         */        [SWF(width=550,height=400,backgroundColor = 0xff0000)]        public class Main 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 Main():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);                                        }        }        }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表