转一个超炫效果,as3制作的。

来源:互联网 发布:sql中count 1 编辑:程序博客网 时间:2024/05/22 07:19
代码如下:
package
{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.text.TextField;
        import flash.utils.*;
       
        public class PerlinForce extends Sprite
        {
                private const origin: Point = new Point();
               
                private const w: int = 256;
                private const h: int = 256;
               
                private const x1: Matrix = new Matrix( 1, 0, 0, 1, 0, 0 );
                private const x2: Matrix = new Matrix( 2, 0, 0, 2, 0, 0 );
               
                //-- fps
                private var fpsText:TextField;
                private var fr: int;
                private var ms: int;
               
                private var force_s: BitmapData;
                private var force_b: BitmapData;
               
                private var forceOffsets: Array;
                private var points: Array;
               
                private var buffer: BitmapData;
                private var output: BitmapData;
                private var damp: ColorTransform;
                private var fxm: Matrix;
               
                public function PerlinForce()
                {
                        init();
                       
                        fpsText = new TextField();
                        fpsText.autoSize = 'left';
                        fpsText.textColor = 0xefefef;
                        addChild( fpsText );
                        ms = getTimer();
                        fr = 0;
                }
               
                private function init(): void
                {
                        output = new BitmapData( w, h, false, 0 );
                        buffer = new BitmapData( w, h, false, 0 );
                       
                        var scl: Number = .25;
                       
                        fxm = new Matrix();
                         fxm.a = ( w + scl ) / w;
                        fxm.d = ( h + scl ) / h;
                        fxm.tx = -scl / 1;
                        damp = new ColorTransform( 1, 1, 1, 1, -4, -4, -4, 0 );
                       
                        force_s = new BitmapData( 128, 128, false, 0 );
                        force_b = new BitmapData( w, h, false, 0 );
                       
                        addChild( new Bitmap( output ) );
                       
                        points = new Array();
                       
                        var point: Object;
                        var i: Number = 6000;
                        while( --i > -1 )
                        {
                                point = { sx: w / 4 + Math.random() * w / 2, sy: h / 4 + Math.random() * h / 2, vx: 0, vy: 0 };
                       
                                points.push( point );
                                 }
               
                        forceOffsets = [ new Point() ];
               
                        stage.addEventListener( 'enterFrame', run );
                }
               
                private function run( event: Event ): void
                {
                        forceOffsets[0].x++;
                        forceOffsets[0].y++;
                       
                        force_s.perlinNoise( 100, 100, 1, 0, true, true, 6, false, forceOffsets );
                        force_b.draw( force_s, x2, null, null, null, true );
                       
                        //-- move points with respect to force
                        var point: Object;
                       
                        var sx: Number;
                        var sy: Number;
                        var vx: Number;
                         var vy: Number;
                       
                        var c: int;
                        var i: Number = points.length;
                        while( --i > -1 )
                        {
                                point = points[i];
                       
                                sx = point.sx;
                                sy = point.sy;
                                vx = point.vx;
                                vy = point.vy;
                       
                                c = force_b.getPixel( sx | 0, sy | 0 );
                               
                                vx += ( ( ( c >> 8 ) & 0xff ) - 0x80 ) / 256;
                                vy += ( ( c & 0xff ) - 0x70 ) / 256;
                                vx *= .97;
                                vy *= .97;
                               
                                sx += vx;
                                sy += vy;
                       
                                if( sx < 0 )
                                {
                                        sx = 0;
                                        vx *= -( Math.random() + 1 );
                                }
                                if( sx > w )
                                {
                                        sx = w;
 vx *= -( Math.random() + 1 );
                                }
                                if( sy < 0 )
                                {
                                        sy = 0;
                                        vy *= -( Math.random() + 1 );
                                }
                                if( sy > h )
                                {
                                        sy = h;
                                        vy *= -( Math.random() + 1 );
                                }
                               
                                point.sx = sx;
                                 point.sy = sy;
                                point.vx = vx;
                                point.vy = vy;
                               
                                buffer.setPixel( sx | 0, sy | 0, 0x66ffff );
                        }
                       
                        buffer.draw( buffer, fxm, damp, null, null, true );
                       
                        output.copyPixels( buffer, buffer.rect, origin );
                       
                        //– fps
                        fr++;
                        if( ms + 1000 < getTimer() )
                        {
                                fpsText.text = fr.toString();
                                fr = 0;
                                ms = getTimer();
                        }
                }
        }
}


本主题包含附件: 17xd_2006101283216.swf (1523bytes)
原创粉丝点击