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: Onomatopoeia Clock

だいぶ遅くなったけど、ワラワラさせてみました。
* クリックで時計表示とランダムレイアウトが入れ替わります。
/**
 * Copyright hacker_akyifj_9 ( http://wonderfl.net/user/hacker_akyifj_9 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/1mS7
 */

// forked from nanlow's Onomatopoeia Clock
/**
 * だいぶ遅くなったけど、ワラワラさせてみました。
 * クリックで時計表示とランダムレイアウトが入れ替わります。
 */
package
{
	import flash.display.Sprite;
	import flash.events.Event
	import flash.events.MouseEvent;
	import net.hires.debug.Stats;
	 [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="60")]
	public class Main extends Sprite
	{
		private var _list:Array = [];
		private var _count:uint = 0;
		private var _clock:Clock;
		private var _h2:NumberGroup;
		private var _h1:NumberGroup;
		private var _m2:NumberGroup;
		private var _m1:NumberGroup;
		private var _dot:DotGroup;
		private var _isRandom:Boolean = false;
		public function Main():void
		{
		     Wonderfl.capture_delay( 10 );
			if (!stage)
				addEventListener(Event.ADDED_TO_STAGE, _init);
			else
				_init();
		}
		private function _init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, _init);
			var vw:Array = _saveMotion(new BaseTypo("NUI"), new VerticalWalkMotion);
			var hw:Array = _saveMotion(new BaseTypo("NOIZE"), new HorizontalWalkMotion);
			var jm:Array = _saveMotion(new BaseTypo("BERLIN"), new JumpMotion);
			var manager:MotionManager = new MotionManager(jm, vw, hw);
			_clock = new Clock();
			_h2 = new NumberGroup(this, manager, new Pt(110, 230));
			_h1 = new NumberGroup(this, manager, new Pt(180, 230));
			_m2 = new NumberGroup(this, manager, new Pt(285, 230));
			_m1 = new NumberGroup(this, manager, new Pt(355, 230));
			_dot = new DotGroup(this, manager, new Pt(232, 230));
			addEventListener(Event.ENTER_FRAME, _onUpdate);
			stage.addEventListener(MouseEvent.CLICK, _onClickHander);
			_clock.addEventListener(Event.CHANGE, _onClockChangeHandler);
			_onClockChangeHandler();
			//addChild(new Stats());
		}
		private function _saveMotion(sp:Sprite, motion:IMotion):Array
		{
			var result:Array = [];
			for (var i:int = 0; i < Conf.FPS; i++)
			{
				result[i]  = motion.create(sp, i, Conf.FPS);
			}
			return result;
		}
		private function _onUpdate(e:Event):void 
		{
			_h2.update();
			_h1.update();
			_m2.update();
			_m1.update();
			_dot.update();
		}
		private function _onClockChangeHandler(e:Event = null):void
		{
			if (!_isRandom)
			{
				_h2.layout(_clock.hoursUpper);
				_h1.layout(_clock.hoursLower);
				_m2.layout(_clock.minutesUpper);
				_m1.layout(_clock.minutesLower);
				_dot.layout();				
			}
		}
		private function _onClickHander(e:MouseEvent):void 
		{
			_isRandom = !_isRandom;
			if (!_isRandom)
			{
				_onClockChangeHandler();
			}else
			{
				_h2.random();
				_h1.random();
				_m2.random();
				_m1.random();
				_dot.random();
			}
		}
	}
}
class Conf
{
	public static const FPS:uint = 60;
	public static const DOT_MARGIN_X:uint = 10;
	public static const DOT_MARGIN_Y:uint = 12;
	public static const STAGE_WIDTH:uint = 465;
	public static const STAGE_HEIGHT:uint = 465;
	public static const ACTIVE_COLOR:uint = 0xFFFFFFFF;
	public static const UNACTIVE_COLOR:uint = 0x99FFFFFF;
}
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.TimerEvent;
import flash.filters.GlowFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.utils.Timer;
class MotionManager
{
	private var _jumpList:Array = [];
	private var _verticalWalkList:Array = [];
	private var _horizontalWalkList:Array = [];
	public function MotionManager(jumpList:Array, verticalWalkList:Array, horizontalWalkList:Array) 
	{
		_jumpList = jumpList;
		_verticalWalkList = verticalWalkList;
		_horizontalWalkList = horizontalWalkList;
	}
	public function getImg(type:String, i:uint):BitmapData
	{
		var list:Array;
		switch(type)
		{
			case "jump":
				list = _jumpList;
				break;
			case "vertical_walk":
				list = _verticalWalkList;
				break;
			case "horizontal_walk":
				list = _horizontalWalkList;
				break;
			default:
				throw new Error("該当するアニメーションがありません。");
				break;
		}
		return list[i] as BitmapData;
	}
}
class NumberGroup
{
	private var _container:DisplayObjectContainer;
	private var _manager:MotionManager;
	private var _basePt:Pt;
	private var _list:Array = [];
	public function NumberGroup(container:DisplayObjectContainer, manager:MotionManager, basePt:Pt)
	{
		_container = container;
		_manager = manager;
		_basePt = basePt;
		_create(41)
	}
	public function layout(id:uint):void
	{
		var layoutList:Array = NumberCoordinate.getArray(id);
		var result:Array = [];
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			if (layoutList[i] == null)
			{
				particle.color = _unactiveColor();
				result = [_stageRandowPt()];
			}else
			{
				particle.color = _activeColor();
				var pt:Pt = layoutList[i] as Pt;
				pt.x += _basePt.x;
				pt.y += _basePt.y;
				result = [_circleRandomPt(), pt];
			}
			particle.setTargetPointList(result);
		}
	}
	public function update():void
	{
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			particle.update();
		}
	}
	public function random():void
	{
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			particle.setTargetPointList([_stageRandowPt()]);
			particle.color = _unactiveColor();
		}
	}
	private function _create(num:uint):void
	{
		var r:Number = Math.sqrt(Conf.STAGE_WIDTH * Conf.STAGE_WIDTH + Conf.STAGE_HEIGHT * Conf.STAGE_HEIGHT) >> 1;
		for (var i:int = 0; i < num; i++)
		{
			var particle:MoveParticle = new MoveParticle(_manager);
			_container.addChild(particle);
			_list[i] = particle;
			var rad:Number = Math.PI * 2 * Math.random();
			particle.i = uint(Conf.FPS * Math.random());
			particle.speed = Math.random() * 0.5 + 0.5;
			particle.x = r * Math.cos(rad) + (Conf.STAGE_WIDTH >> 1);
			particle.y = r * Math.sin(rad) + (Conf.STAGE_HEIGHT >> 1);
		}
	}
	private function _activeColor():uint
	{
		var result:uint = Conf.ACTIVE_COLOR;
		//var r:Number = Math.random();
		//if (r < 1 / 3)
		//{
			//result = 0xCCffeb00;
		//}else if(r < 2 / 3)
		//{
			//result = 0xCC97e3ff;
		//}else
		//{
			//result = 0xCCff7cb2;
		//}
		return result;
	}
	private function _unactiveColor():uint
	{
		return Conf.UNACTIVE_COLOR;
		//return 0xCC8076c0;
	}
	private function _stageRandowPt():Pt
	{
		return new Pt(Conf.STAGE_WIDTH * Math.random(), Conf.STAGE_HEIGHT * Math.random());
	}
	private function _circleRandomPt():Pt
	{
		return new Pt(Math.random() * 150 - 75 + _basePt.x, Math.random() * 150 - 75 + _basePt.y);
	}
}
class DotGroup
{
	private var _container:DisplayObjectContainer;
	private var _manager:MotionManager;
	private var _basePt:Pt;
	private var _list:Array = [];
	public function DotGroup(container:DisplayObjectContainer, manager:MotionManager, basePt:Pt)
	{
		_container = container;
		_manager = manager;
		_basePt = basePt;
		_create(4);
	}
	public function layout():void
	{
		var layoutList:Array = DotCoordinate.getArray();
		var result:Array = [];
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			particle.color = _activeColor();
			var pt:Pt = layoutList[i] as Pt;
			pt.x += _basePt.x;
			pt.y += _basePt.y;
			result = [_circleRandomPt(), pt];
			particle.setTargetPointList(result);
		}
	}
	public function update():void
	{
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			particle.update();
		}
	}
	public function random():void
	{
		for (var i:int = 0; i < _list.length; i++)
		{
			var particle:MoveParticle = _list[i] as MoveParticle;
			particle.setTargetPointList([_stageRandowPt()]);
			particle.color = _unactiveColor();
		}
	}
	private function _create(num:uint):void
	{
		var r:Number = Math.sqrt(Conf.STAGE_WIDTH * Conf.STAGE_WIDTH + Conf.STAGE_HEIGHT * Conf.STAGE_HEIGHT) >> 1;
		for (var i:int = 0; i < num; i++)
		{
			var particle:MoveParticle = new MoveParticle(_manager);
			_container.addChild(particle);
			_list[i] = particle;
			var rad:Number = Math.PI * 2 * Math.random();
			particle.i = uint(Conf.FPS * Math.random());
			particle.speed = Math.random() * 0.5 + 0.5;
			particle.x = r * Math.cos(rad) + (Conf.STAGE_WIDTH >> 1);
			particle.y = r * Math.sin(rad) + (Conf.STAGE_HEIGHT >> 1);
		}
	}
	private function _activeColor():uint
	{
		var result:uint = Conf.ACTIVE_COLOR;
		//var r:Number = Math.random();
		//if (r < 1 / 3)
		//{
			//result = 0xCCffeb00;
		//}else if(r < 2 / 3)
		//{
			//result = 0xCC97e3ff;
		//}else
		//{
			//result = 0xCCff7cb2;
		//}
		return result;
	}
	private function _unactiveColor():uint
	{
		return Conf.UNACTIVE_COLOR;
		//return 0xCC8076c0;
	}
	private function _stageRandowPt():Pt
	{
		return new Pt(Conf.STAGE_WIDTH * Math.random(), Conf.STAGE_HEIGHT * Math.random());
	}
	private function _circleRandomPt():Pt
	{
		return new Pt(Math.random() * 150 - 75 + _basePt.x, Math.random() * 150 - 75 + _basePt.y);
	}
}
class MoveParticle extends Sprite
{
	private var _i:uint;
	private var _count:uint;
	private var _type:String;
	private var _targetPoint:Pt;
	private var _speed:Number;
	private var _speedPoint:Pt
	private var _bitmap:Bitmap;
	private var _manager:MotionManager;
	private var _isMove:Boolean;
	private var _targetPtList:Array= [];
	public function MoveParticle(manager:MotionManager)
	{
		_init(manager);
	}
	private function _init(manager:MotionManager):void
	{
		_manager = manager
		_targetPtList = [];
		_i = 0;
		_type = "jump";
		_speed = 1;
		var bmd:BitmapData = new BitmapData(15, 40, true, 0x00FFFFFF);
		_bitmap = addChild(new Bitmap(bmd)) as Bitmap;
		_bitmap.x = -(_bitmap.width >> 1);
		_bitmap.y = -_bitmap.height;
		_setTargetPoint(new Pt(0, 0));
	}
	private function _setTargetPoint(pt:Pt):void
	{
		_targetPoint = pt;
		var kx:Number = pt.x - x;
		var ky:Number = pt.y - y;
		var k:Number = Math.sqrt(kx * kx + ky * ky);
		var v:Number = k / _speed;
		_speedPoint = new Pt(kx / v, ky / v);
		_count = uint(v);
		_type = (Math.abs(kx) < Math.abs(ky)) ? "vertical_walk" : "horizontal_walk";
		_bitmap.y = -30
		_isMove = true;
	}
	private function _checkList():void
	{
		if (0 < _targetPtList.length)
		{
			_setTargetPoint(_targetPtList.shift());
		}
	}
	public function setTargetPointList(list:Array):void
	{
		_targetPtList = list;
		_checkList();
	}
	public function update():void
	{
		_bitmap.bitmapData = _manager.getImg(_type, _i);
		_i = (_i + 1) % Conf.FPS;
		
		if (!_isMove) { return };
		
		if (0 == _count)
		{
			x = _targetPoint.x;
			y = _targetPoint.y;
			_bitmap.y = -40
			_type = "jump";
			_isMove = false;
			_checkList();
		}else if (0 < _count)
		{
			x += _speedPoint.x;
			y += _speedPoint.y;
			_count--
		}
	}
	public function set i(value:uint):void
	{
		_i = value;
	}
	public function set color(value:uint):void
	{
		transform.colorTransform = new ColorTransform(1, 1, 1, 1, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF, -255 + (value >> 24 & 0xFF));
	}
	public function set type(value:String):void
	{
		_type = value;
	}
	public function set speed(value:Number):void
	{
		_speed = value;
	}
}
class NumberCoordinate 
{
	public static function getArray(id:uint):Array
	{
		var result:Array = [];
		switch(id)
		{
			case 0:
				result = _checkNumber(LIST0);
				break;
			case 1:
				result = _checkNumber(LIST1);
				break;
			case 2:
				result = _checkNumber(LIST2);
				break;
			case 3:
				result = _checkNumber(LIST3);
				break;
			case 4:
				result = _checkNumber(LIST4);
				break;
			case 5:
				result = _checkNumber(LIST5);
				break;
			case 6:
				result = _checkNumber(LIST6);
				break;
			case 7:
				result = _checkNumber(LIST7);
				break;
			case 8:
				result = _checkNumber(LIST8);
				break;
			case 9:
				result = _checkNumber(LIST9);
				break;
			default:
				throw new Error('引数に一桁のuintを指定してください。');
				break;
		}
		return result;
	}
	private static function _checkNumber(_list:Array):Array
	{
		var result:Array = [];
		for (var i:int = 0; i < BASE_LIST.length; i++ )
		{
			if (_list[i] == 1)
			{
				result[i] = new Pt(BASE_LIST[i][0] * Conf.DOT_MARGIN_X, BASE_LIST[i][1] * Conf.DOT_MARGIN_Y);
			}else
			{
				result[i] = null;
			}
		}
		return result;
	}
	private static const LIST0:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST1:Array = [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1];
	private static const LIST2:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST3:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST4:Array = [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1];
	private static const LIST5:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST6:Array = [1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST7:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1];
	private static const LIST8:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
	private static const LIST9:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1];
	private static const BASE_LIST:Array =[[ -2, -4], [ -1, -4], [0, -4], [1, -4], [2, -4], [ -2, -3], [ -1, -3], [0, -3], [1, -3], [2, -3], [ -2, -2], [ -1, -2],  [1, -2], [2, -2], [ -2, -1], [ -1, -1],  [1, -1], [2, -1], [ -2, 0], [ -1, 0], [0, 0], [1, 0], [2, 0], [ -2, 1], [ -1, 1],  [1, 1], [2, 1], [ -2, 2], [ -1, 2],  [1, 2], [2, 2], [ -2, 3], [ -1, 3], [0, 3], [1, 3], [2, 3], [ -2, 4], [ -1, 4], [0, 4], [1, 4], [2, 4]]
}
class DotCoordinate 
{
	public static function getArray():Array
	{
		var result:Array = [];
		for (var i:int = 0; i < BASE_LIST.length; i++ )
		{
			result[i] = new Pt(BASE_LIST[i][0] * Conf.DOT_MARGIN_X, BASE_LIST[i][1] * Conf.DOT_MARGIN_Y);
		}
		return result;
	}
	private static const BASE_LIST:Array = [[ -0.5, -1.5], [0.5, -1.5], [ -0.5, 1.5], [0.5, 1.5]];
}
class Clock extends EventDispatcher
{
	private var _hours:Number;
	private var _minutes:Number;
	private var _preMinutes:Number;
	public function Clock() 
	{
		var timer:Timer = new Timer(1000);
		timer.addEventListener(TimerEvent.TIMER, _onTimerHandler);
		timer.start();
		_onTimerHandler();
	}
	public function get hoursUpper():int { return _hours / 10; }
	public function get minutesUpper():int { return _minutes / 10; }
	public function get hoursLower():int { return _hours % 10; }
	public function get minutesLower():int  { return _minutes % 10; }
	private function _onTimerHandler(e:TimerEvent = null):void 
	{
		var date:Date = new Date();
		_hours = date.getHours()
		_minutes = date.getMinutes();
		if (_preMinutes != _minutes)
		{
			dispatchEvent(new Event(Event.CHANGE));
		}
		_preMinutes = _minutes;
	}
}
class BaseTypo extends Sprite
{
	public function BaseTypo(str:String) 
	{
		var bitmapData:BitmapData = _getMinimumBitmapData(_createTextField(str));
		var bm:Bitmap = new Bitmap(bitmapData);
		bm.y = -bm.height;
		var sp:Sprite = new Sprite();
		sp.addChild(bm)
		addChild(sp);
	}
	private function _createTextField(str:String):TextField
	{
		var result:TextField = new TextField();
		result.width = 16;
		result.autoSize = TextFieldAutoSize.LEFT;
		result.wordWrap = true;
		result.multiline = true;
		var format:TextFormat = new TextFormat();
		format.size = 14;
		format.font = '_等幅';
		format.leading = -5
		format.color = 0;
		format.bold = true;
		result.defaultTextFormat = format;
		result.text = str;
		result.filters = [new GlowFilter(0, 1, 1.2, 1.2, 3.0)];
		return result;
	}
	private function _getMinimumBitmapData(tf:TextField):BitmapData
	{
		var bmd1:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, true, 0x00000000);
		bmd1.draw(tf, new Matrix(1, 0, 0, 1, -2, -2));
		var rectangle:Rectangle = bmd1.getColorBoundsRect(0xff000000, 0x00000000, false);
		var bmd2:BitmapData = new BitmapData(rectangle.width, rectangle.height, true, 0x00FFFFFF);
		bmd2.draw(bmd1, new Matrix(1, 0, 0, 1, -rectangle.x, -rectangle.y));
		bmd1.dispose();
		return bmd2;
	}
}
interface IMotion
{
	function create(sp:Sprite, i:int, n:int):BitmapData
}
class JumpMotion implements IMotion
{
	public function JumpMotion() { };
	public function create(sp:Sprite, i:int, n:int):BitmapData
	{
		var child:DisplayObject = sp.getChildAt(0);
		var result:BitmapData = new BitmapData(20, 50, true, 0x00FFFFFF);
		var rad:Number = (Math.PI * 2 / n) * i;
		child.x=5
		child.y = Math.abs(Math.cos(rad)) * 10 + 30
		child.scaleY = Math.abs(Math.sin(rad - 0.75)) * 0.4 + 0.6;
		result.draw(sp);
		return result;
	}
}
class VerticalWalkMotion implements IMotion
{
	public function VerticalWalkMotion() { };
	public function create(sp:Sprite, i:int, n:int):BitmapData
	{
		var child:DisplayObject = sp.getChildAt(0);
		var result:BitmapData = new BitmapData(30, child.height, true, 0x00FFFFFF);
		var rad:Number = (Math.PI * 2 / n) * i * 2;
		var x0:Number = 0;
		var x1:Number = 0.5 * Math.abs(Math.cos(rad)) + 0.5;
		var x2:Number = 0.3 * Math.sin(rad*2);
		var y0:Number = 0;
		var y1:Number = 0.3 * Math.sin(rad);
		var y2:Number = 1;
		var mat:Matrix = new Matrix((x1 - x0), (y1 - y0),  (x2 - x0), (y2 - y0), x0, y0);
		child.transform.matrix = mat;
		child.x = 5
		child.y = child.height
		result.draw(sp);
		return result;
	}
}
class HorizontalWalkMotion implements IMotion
{
	public function HorizontalWalkMotion() { };
	public function create(target:Sprite, i:int, fps:int):BitmapData
	{
		var child:DisplayObject = target.getChildAt(0);
		var result:BitmapData = new BitmapData(30, 40, true, 0x00FFFFFF);
		var rad:Number = (Math.PI * 2 / fps) * i * 2;
		var x0:Number = 0;
		var x1:Number = 0.5 * Math.cos(rad);
		var x2:Number = 0.2 * Math.sin(rad*2);
		var y0:Number = 0
		var y1:Number = 0.2;
		var y2:Number = 1;
		var mat:Matrix = new Matrix((x1 - x0), (y1 - y0),  (x2 - x0), (y2 - y0), x0, y0);
		child.transform.matrix = mat;
		child.x = 10
		child.y = child.height
		result.draw(target);
		return result;
	}
}
class Pt
{
	public var x:Number;
	public var y:Number;
	public function Pt(x:Number, y:Number) 
	{
		this.x = x;
		this.y = y;
	}
}