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: 単位球面上の移動

ColorTransformの方がいい気がしてきた
/**
 * Copyright dezimo ( http://wonderfl.net/user/dezimo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/9Oom
 */

// forked from uwi's forked from: 単位球面上の移動
// ColorTransformの方がいい気がしてきた
// forked from 178ep3's 単位球面上の移動
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	 [SWF(width=465, height=465, frameRate=30, backgroundColor=0x000000)] 
	public class Sphere extends Sprite
	{
                private const N : int = 100;
    
		public function Sphere()
		{
			var i:int = 0;
			var list:Array = [];
			for(i=0; i<N; i++)
			{
				var d:Dot = addChild(new Dot(i))as Dot;
				list.push(d);
			}
			
			addEventListener(Event.ENTER_FRAME,upup);
			
			function upup(e:Event):void
			{
				for(i=0; i<N; i++)
				{
					list[i].loop();
				}
			}
		}
	}
}

	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;

class Dot extends Sprite
{
	private var _x:Number=0;
	private var _y:Number=0;
	private var _z:Number=0;
	
	private var _r:uint = 1;
	
	private var _xyAngle:Number = 0;
	private var _xzAngle:Number = 0;
	private var _xyAdd:Number;
	private var _xzAdd:Number;
	
	private var _rad:uint=100;
	private var _dot:Shape;

        private var _num:int;
		
	public function Dot(setNum:int)
	{
                _num = setNum;
		_xyAngle = setNum*6-90;
		_xzAngle = setNum*10;
		
		this.x = 238;
		this.y = 238;
		
		_xyAdd = 0.7;
		_xzAdd = 1.11;
		
		init();
	}
		
	private function init():void
	{
		_dot = addChild(new Shape())as Shape;
		with(_dot.graphics)
		{
			beginFill(uint(0xff * _num / 100) * 0x10101);
			drawCircle(0,0,3);
			endFill();
		}
	}
			
	public function loop():void
	{
		_xyAngle +=_xyAdd;
		_xzAngle +=_xzAdd;
		if(_xyAngle>360)_xyAngle-=360;
		if(_xzAngle>360)_xzAngle-=360;
			
		_x = Math.cos(_xyAngle*Math.PI/180);
		_y = Math.sin(_xyAngle*Math.PI/180);
		_x = _x * Math.cos(_xzAngle*Math.PI/180);
		_z = Math.sqrt(1 - _x * _x - _y * _y);
		if(_xzAngle>180)_z*=-1;
		_dot.x = _x*_rad;
		_dot.y = _y*_rad;

		_dot.scaleX = _dot.scaleY = _z+1.1;
	}
}