PerlinForce.as
资源名称:lizi.rar [点击查看]
上传用户:shuntian
上传日期:2021-04-12
资源大小:5k
文件大小:7k
源码类别:
FlashMX/Flex源码
开发平台:
Flash/ActionScript
- 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();
- }
- }
- }
- }
English
