Forked from: arithma's swarms diff:24 persistent swarms ... @author ... arithma forked:3favorite:2lines:76license : MIT License modified : 2010-03-04 17:46:49 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.geom.ColorTransform; import flash.geom.Point; /** * ... * @author ... */ public class Main extends Sprite { public const N:int = 200; public var points:Array; public var bmp:Bitmap; public var bmpdata:BitmapData; public var sprite:Sprite; 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 stage.frameRate = 120; bmpdata = new BitmapData(stage.stageWidth, stage.stageHeight); bmp = new Bitmap(bmpdata); addChild(bmp); sprite = new Sprite(); points = new Array(); for (var i:int = 0; i < N; i++) { var arrw:MovieClip = new MovieClip(); arrw.x = Math.random() * stage.stageWidth; arrw.y = Math.random() * stage.stageHeight; arrw.graphics.beginFill(Math.random() * 0xFFFFFF); arrw.graphics.moveTo( -Math.sin(Math.PI / 10)*10, (.5 - Math.cos(Math.PI / 10)) * 10); arrw.graphics.lineTo( +Math.sin(Math.PI / 10)*10, (.5 - Math.cos(Math.PI / 10)) * 10); arrw.graphics.lineTo( 0, .5 * 10); arrw.graphics.endFill(); arrw.rotation = Math.atan2(arrw.vy, arrw.vx) * 180 / Math.PI - 90; sprite.addChild(arrw); points.push(arrw); } addEventListener(Event.ENTER_FRAME, frame); } private function frame(e:Event = null):void { for each(var arrw:MovieClip in points) { var vx:Number = 0; var vy:Number = 0; for each(var other:MovieClip in points) { if (other != arrw) { var dist2:Number = (arrw.x - other.x) * (arrw.x - other.x) + (arrw.y - other.y) * (arrw.y - other.y); var dist:Number = Math.sqrt(dist2); vx += 1 * (Math.exp(-dist*.05)) * (other.x - arrw.x) / dist; vy += 1 * (Math.exp(-dist*.05)) * (other.y - arrw.y) / dist; vx += -20 * (Math.exp(-dist2*.005)) * (other.x - arrw.x) / dist; vy += -20 * (Math.exp(-dist2*.005)) * (other.y - arrw.y) / dist; vx -= .15 * (Math.exp( -dist2 * .001)) * (other.y - arrw.y); vy += .15 * (Math.exp( -dist2 * .001)) * (other.x - arrw.x); } } arrw.x += .2*vx; arrw.y += .2*vy; arrw.rotation = Math.atan2(vy, vx) * 180 / Math.PI - 90; } var result:Sprite = new Sprite(); result.addChild(bmp); bmp.transform.colorTransform = new ColorTransform(.99, .99, .99, 1, .01); result.addChild(sprite); bmpdata.draw(result); addChild(bmp); bmp.transform.colorTransform = new ColorTransform(); } } } Code Fullscreen Preview Fullscreen Fixie_s digitrick Math.exp rotation Math.PI Math.atan2 Event.ADDED_TO_STAGE stage addEventListener removeEventListener Math.cos Math.sqrt addChild Math.sin Event push Event.ENTER_FRAME Math.random Array Sprite int Number sort new page view favorite forked pv658 persistent swarms 2 arithma forked:2 favorite:2lines:93 (diff:40) pv283 forked from: persistent swarms.. nt3 forked:1 favorite:0lines:76 (diff:4) pv213 forked from: persistent swarms.. MisterNemo forked:0 favorite:1lines:83 (diff:16)