In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: forked from: Worm Study04

// forked from yut1's forked from: Worm Study04
// forked from fladdict's Worm Study04
// forked from fladdict's Worm Study03
// forked from fladdict's Worm Study02
// forked from fladdict's Worm Study01
// forked from fladdict's code on 2008-12-17
// write as3 code here..
// Study for color generation.
package{
  import flash.display.*
  import flash.events.*
  import flash.geom.*

  public class Sketch02 extends Sprite
  {
    public var bm:Bitmap;
    public var bmd:BitmapData;

    public var particles:Array;
    public var numParticles:int = 100;



    public function Sketch02():void
    {
      bmd = new BitmapData(stage.stageWidth,stage.stageHeight, false, 0x000000);
      bm = new Bitmap(bmd);
      addChild(bm);

      particles = [];
      for(var i:int=0; i<numParticles; i++)
      {
        var prt:Object = createParticle();
        particles.push(prt);
      }
      stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }

    public function enterFrameHandler(e:Event):void
    {
      var n:int = particles.length;
      for(var i:int=0; i<n; i++)
      {
        var prt:Object = particles[i];

        prt.dv += Math.random()*0.03-0.015;
        prt.direction += prt.dv;

        prt.x += Math.cos(prt.direction) * prt.v;
        prt.y += Math.sin(prt.direction) * prt.v;
        if(prt.x < 0 ){
          prt.x = stage.stageWidth;
        }else if(prt.x > stage.stageWidth){
          prt.x = 0;
        }
        if(prt.y < 0 ){
          prt.y = stage.stageHeight;
        }else if(prt.y > stage.stageHeight){
          prt.y = 0;
        }

        //
        //Add randomness to color
        //
        prt.rad += prt.radV;
        var r:Number = prt.red   * ((1+Math.cos(prt.rad))*0.5);
        var g:Number = prt.green * ((1+Math.cos(prt.rad))*0.5);
        var b:Number = prt.blue  * ((1+Math.cos(prt.rad))*0.5);
        r = Math.round(Math.min(255, Math.max(0,r)));
        g = Math.round(Math.min(255, Math.max(0,g)));
        b = Math.round(Math.min(255, Math.max(0,b)));
        var col:Number = r<<16 | g<<8 | b;

        bmd.setPixel(prt.x, prt.y, col);
      }
    }

    protected function createParticle():Object
    {
        var obj:Object = {};
        //moving setting
        obj.x = stage.stageWidth * 0.5;
        obj.y = stage.stageHeight * 0.5;
        obj.v = 0.4 + Math.random()*0.5;
        obj.direction = Math.random()*Math.PI*2;

        //color setting
        obj.red = Math.random()*255;
        obj.green = Math.random()*obj.red;
        obj.blue = Math.random()*obj.red;

        //oscilator setting
        obj.rad = Math.random()*Math.PI*2;
        obj.radV = 0.1;

        obj.color = getColor();
        obj.dv = (Math.random()-0.5) * 0.03;
        return obj;
    }

    protected function getColor():int
    {
        var r:int = Math.random()*255;
        var g:int = Math.random()*r*0.5 + r*0.5;
        var b:int = Math.random()*g*0.5 + r*0.5;
        return r<<16 | g<<16 | b;
    }

    protected function normRand():Number 
    {
      return (Math.random()+Math.random()+Math.random()+Math.random()+Math.random())/5 - 0.5;
    }
  }
}