AS3 发表于 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         */            public class Main extends Sprite         {                private var bitmap:Bitmap;                private var bmpData:BitmapData;                private var filter:ConvolutionFilter = new ConvolutionFilter(3, 3, , 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.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.x += Vx;                                        arrPoint.y += Vy;                                        if (arrPoint.x > 350) {                                                arrPoint.splice(i, 1);                                                arrColor.splice(i, 1);                                                arrVx.splice(i, 1);                                                arrVy.splice(i,1);                                        }                              }else {                                                                              arrPoint.x += arrVx;                                        var g:Number = Math.random() / 50;                                        arrVy += g;                                        arrPoint.y += arrVy;                                        setColor(arrPoint.x, arrPoint.y, arrColor);                                                                        }                        }                        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);                                        }      }      }
页: [1]
查看完整版本: [转]粒子 瀑布