//@ package -- nodegarden package { import flash.display.Sprite; import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.events.Event; import flash.geom.Point; [SWF(backgroundColor=0x000000)] //@ class public class animation_ch12_NodeGarden extends Sprite { private var particles:Array; private var numParticles:uint = 30; private var minDist:Number = 100; private var springAmount:Number = .001; //@ constructor public function animation_ch12_NodeGarden() { init(); } //@ init(s) private function init():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; particles = new Array(); //@ particle(s) for(var i:uint = 0; i < numParticles; i++) { var particle:animation_ch12_Ball = new animation_ch12_Ball(5, 0xffffff); particle.x = Math.random() * stage.stageWidth; particle.y = Math.random() * stage.stageHeight; particle.vx = Math.random() * 6 - 3; particle.vy = Math.random() * 6 - 3; addChild(particle); particles.push(particle); } //@ event listener addEventListener(Event.ENTER_FRAME, onEnterFrame); } //@ animation / frame(s) private function onEnterFrame(event:Event):void { for(var i:uint = 0; i < numParticles; i++) { var particle:animation_ch12_Ball = particles[i]; particle.x += particle.vx; particle.y += particle.vy; //@ chack/ stage if(particle.x > stage.stageWidth) { particle.x = 0; } else if(particle.x < 0) { particle.x = stage.stageWidth; } if(particle.y > stage.stageHeight) { particle.y = 0; } else if(particle.y < 0) { particle.y = stage.stageHeight; } } //@ process particle(s) for(i=0; i < numParticles - 1; i++) { var partA:animation_ch12_Ball = particles[i]; for(var j:uint = i + 1; j < numParticles; j++) { var partB:animation_ch12_Ball = particles[j]; spring(partA, partB); } } } //@ spring(s0 private function spring(partA:animation_ch12_Ball, partB:animation_ch12_Ball):void { var dx:Number = partB.x - partA.x; var dy:Number = partB.y - partA.y; var dist:Number = Math.sqrt(dx * dx + dy * dy); if(dist < minDist) { var ax:Number = dx * springAmount; var ay:Number = dy * springAmount; partA.vx += ax; partA.vy += ay; partB.vx -= ax; partB.vy -= ay; } } } }