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: 毛ボール

Get Adobe Flash player
by hacker_1nsq_qs0 25 Dec 2008
    Embed
// forked from borealkiss's 毛ボール
// forked from ll_koba_ll's 3D Ball
package {
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Matrix;
	
	[SWF(width="465",height="465",backgroundColor="0x0")]
	public class main extends Sprite{
		private const STAGE_WIDTH:int = 465;
		private const STAGE_HEIGHT:int = 465;
		private const LIMIT:int = 10000;
		private const HAIR_LENGTH:int = 100;
		
		public function main(){
			this.init();
		}
		
		private function init():void{			
			var canvasBitmapData:BitmapData = new BitmapData(STAGE_WIDTH,STAGE_HEIGHT,true,0x0);
			var matrix:Matrix = new Matrix();
			matrix.translate(STAGE_WIDTH/2,STAGE_HEIGHT/2);
			canvasBitmapData.draw(new Ball3D(),matrix);
			this.addChild(new Bitmap(canvasBitmapData));
			
			var hair:Sprite = new Hair(canvasBitmapData,LIMIT,HAIR_LENGTH,0xFFFFFF);
			this.addChild(hair);
		}
	}
}

import flash.display.*;
import flash.events.*;
import flash.geom.*;

class Ball3D extends Sprite{
    public function Ball3D(){
    	init();
    }

    private function init():void{
        var ball:Sprite = new Sprite();
        var fillType:String = GradientType.RADIAL;
        var colors:Array = [0xFFFFFF, 0x333333];
        var alphas:Array = [1, 1];
        var ratios:Array = [0x00, 0xFF];
        var matr:Matrix = new Matrix();
        matr.createGradientBox(-250, -250, Math.PI/2, 100, 80);
        var spreadMethod:String = SpreadMethod.PAD;
        var interpolation:String = InterpolationMethod.RGB;
        ball.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod,interpolation);  
        ball.graphics.drawCircle(0,0,100);
        addChild(ball);   
    }
}

import flash.display.Sprite;
import flash.display.Graphics;
import flash.display.BitmapData;

class Hair extends Sprite{
	protected var _sourceBitmapData:BitmapData;
	protected var _random:uint;
	protected var _stroke:uint;
	protected var _limit:uint;
	protected var _alpha:Number;
	
	/**
	 * Constructor
	 */ 
	public function Hair(sourceBitmapData:BitmapData,limit:uint,random:uint,stroke:uint=0x0,alpha:Number=0.1){
		_sourceBitmapData = sourceBitmapData;
		_limit = limit;
		_random = random;
		_stroke = stroke;
		_alpha = alpha;
		this.init();
	}
	
	protected function init():void{
		var rectWidth:int = _sourceBitmapData.width;
		var rectHeight:int = _sourceBitmapData.height;
		
		var g:Graphics = this.graphics;
		g.clear();
		g.lineStyle(0,_stroke,_alpha);
		
		for (var i:int=0; i<_limit; i++){
			var x:int = int(Math.random()*rectWidth);
			var y:int = int(Math.random()*rectHeight);
			var color32:uint = _sourceBitmapData.getPixel32(x,y);
			
			if (isInObject(color32)){
				//Start point
				var startX:Number = x;
				var startY:Number = y;
				
				//Anchor point so that the hair goes outer.
				var hairRad:Number = _random*Math.random();
				var hairTheta:Number = Math.random()*2*Math.PI;
				var anchorX:Number = startX + hairRad*Math.cos(hairTheta);
				var anchorY:Number = startY + hairRad*Math.sin(hairTheta);
				
				//Control point for the Bezier curve.
				var controlRad:Number = _random*Math.random();
				var controlTheta:Number = Math.random()*2*Math.PI;
				var controlX:Number = startX + controlRad*Math.cos(controlTheta);
				var controlY:Number = startY + controlRad*Math.sin(controlTheta);
				
				g.moveTo(startX,startY);
				g.curveTo(controlX,controlY,anchorX,anchorY);
			}
		}
	}
	
	protected function isInObject(color32:uint):Boolean{
		if (color32 == 0x0){
			return false;
		}
		return true;
	}
	
	protected function randomGen(random:uint):Number{
		return 2*random*(Math.random() - 1/2);
	}
}