topical media & game development

talk show tell print

animation-ch12-NodeGarden.ax

animation-ch12-NodeGarden.ax [swf] [flash] flex


  

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 @ax-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 @ax-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;
     }
    }
   }
  }
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.