localToGlobal & globalToLocal

by WLAD
localToGlobal & globalToLocal

♥0 | Line 134 | Modified 2014-12-23 11:06:43 | MIT License
play

ActionScript3 source code

/**
 * Copyright WLAD ( http://wonderfl.net/user/WLAD )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sTp9
 */

// ----------------------------------------------------------------------------------------------
/// @INIT>FLASH	-----------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------
package  
{	import flash.display.Sprite;
	import flash.geom.Point;
	/** @author http://wonderfl.net/user/Vladik */		
	[SWF(width="465", backgroundColor="0x38673D", height="465", frameRate="60")]
	public class LocalGlobalPoint extends Sprite 
	{
		public function LocalGlobalPoint() { sw = stage.stageWidth; sh = stage.stageHeight; stage.addChild( new Log() );  
		graphics.beginFill(0x38673D); graphics.drawRect(0, 0, 2000, 2000); graphics.endFill();
		
			// ----------------------------------------------------------------------------------------------
			/// @INIT>BOXES	-----------------------------------------------------------------------------
			// ----------------------------------------------------------------------------------------------
			
			var RED:Rect = new Rect(250, 250, 0xFF0000, 0.5,  0.5, 140, 140, onClick);
			RED.name = "RED";
			addChild( RED );
			
			var BLUE:Rect = new Rect(100, 30, 0x46DBF0, 0,0, 40, 0, onClick);
			BLUE.name = "BLUE";
			RED.addChild( BLUE );
			
			var GREEN:Rect = new Rect(200, 100, 0x23BB09, 0.2, 0.2, 350, 300, onClick);
			addChild( GREEN );
			GREEN.name = "GREEN";
			
			var YELLOW:Rect = new Rect(50, 50, 0xFFFF00, .5, .5, 80, 0, onClick);
			GREEN.addChild( YELLOW );
			YELLOW.name = "YELLOW";
			YELLOW.angularSpeed = -GREEN.angularSpeed;
			
			// ----------------------------------------------------------------------------------------------
			/// @HELP>MESSAGE	-----------------------------------------------------------------------------
			// ----------------------------------------------------------------------------------------------
			
			var stageClick:Function = function(e:*):void{ if ( e.target != stage) return;
			log('RED.addChild( BLUE )', '\nGREEN.addChild(YELLOW)', '\nClick on the colored boxes'); };
			stage.addEventListener('click', stageClick);stageClick();
		}
		
		
		
		// ----------------------------------------------------------------------------------------------
		/// @ON>BOX>CLICK	-----------------------------------------------------------------------------
		// ----------------------------------------------------------------------------------------------
		
		private function onClick( r:Rect ):void
		{
			// Transform points
			var p:Point = new Point( r.mouseX, r.mouseY );
			var p1:Point = r.localToGlobal( p );
			
			p = new Point( stage.mouseX, stage.mouseY );
			
			var p3:Point = r.parent.globalToLocal( p );
			var p4:Point = r.globalToLocal(p); 
			
			
			// Change log output colot
			Log.t.textColor = r.color;
			
			// Log Rect click event message
			log( 'this=', r.name, ": ", 
				'box local mouse(mx):', r.mouseX.toFixed(0), 
				'\(my):', r.mouseY.toFixed(0), 
				'\nstage mouse(smx):', stage.mouseX.toFixed(0), 
				'\t(smy):', stage.mouseY.toFixed(0),
				'\t\n<font color="#F08D15">ORANGE CLICK</font>=this.localToGlobal(mx, my) = ' , p1,
				'\t\n<font color="#FFFFFF">WHITIE</font>=this.globalToLocal(smx, smy) = ' , p4,
				'\t\n<font color="#888888">BLACK</font>=this.parent.globalToLocal(smx, smy) = ' , p3
			);
			
			// Display Click on stage!
			stage.addChild( new Click(p1.x , p1.y, 0xF08D15 ) );
			//stage.addChild( new Click(p2.x , p2.y, 0xD818ED ) );
			
			r.graphics.beginFill(0xFFFFFF);
			r.graphics.drawCircle(p4.x, p4.y, 4 + Math.random() * 5);
			r.graphics.endFill();
			
			r.graphics.beginFill(0);
			r.graphics.drawEllipse(p3.x - 4, p3.y - 2, 13, 8);
			r.graphics.endFill();
		}
	}
}

// ----------------------------------------------------------------------------------------------
/// @HELPERS	-----------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------

import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;

class Rect extends Sprite
{
	public var angularSpeed:Number = Math.random() * 4 - 2;
	public var color:uint;
	public function Rect( w:Number, h:Number, c:uint, pivotX:Number = 0, pivotY:Number = 0, x:Number = 0, y:Number = 0 , onClick:Function = null )
	{
		color = c;
		this.x = x;
		this.y = y;
		useHandCursor = buttonMode = true;
		graphics.beginFill( c );
		graphics.drawRect(0 - w * pivotX, - h * pivotY, w, h );
		graphics.endFill();
		graphics.beginFill( 0x0 );
		graphics.drawCircle(0, 0, 7);
		graphics.endFill();
		graphics.beginFill( 0xFFFFFF );
		graphics.drawCircle(0, 0, 5);
		graphics.endFill();
		var _self:Rect = this;if ( onClick!=null ) addEventListener('mouseDown', function(e:*):void { if( e.target == _self ) onClick( _self ); } );
		addEventListener('enterFrame', function(e:*):void{rotation += angularSpeed;});
	}
}
class Log extends Sprite 
{
	public static var t:TextField;
	public function Log() 
	{
		t = new TextField();
		addEventListener(Event.ADDED_TO_STAGE, init);
	}
	
	private function init(e:Event):void 
	{
		removeEventListener(Event.ADDED_TO_STAGE, init);
		addChild( t );
		t.height = 160;
		t.alpha = 0.6;
		t.background = true; t.backgroundColor = 0x0;
		t.defaultTextFormat = new TextFormat('Verdana', 16, 0xFFFFFF,
		null,null,null,null,null,'left');
		t.multiline = t.wordWrap = true;
		mouseEnabled = mouseChildren = t.mouseEnabled = false;
		t.width = sw; t.y = sh -t.height;
		
	}
}
class Click extends Sprite
{
	private var c:uint;
	private var r:Number = 5;
	public function Click(x:Number, y:Number, c:uint)
	{
		this.c = c;
		this.x = x;
		this.y = y;
		addEventListener('enterFrame', loop);
	}
	
	private function loop(e:*):void
	{
		graphics.clear();
		graphics.beginFill(c);
		graphics.drawCircle(0, 0, r);
		graphics.endFill();
		graphics.lineStyle(2, 0);
		graphics.drawCircle(0, 0, r);
		graphics.lineStyle(2, 0xFFFFFF);
		graphics.drawCircle(0, 0, r + 1);
		r+=1;
		
		alpha = ( 100 - r ) / 100;
		
		if ( r > 100) {
			removeEventListener('enterFrame', loop);
			if(parent ) parent.removeChild( this );
		}
	}
}
var sw:int, sh:int;
function log( ...arguments ):void {
	/*var tabs:String = "[";
	var l:Number = int(sw/arguments.length)
	var c:int = 0; while ( c < arguments.length ) 
	{
		tabs += String(l * (c + 1)) + ( c == arguments.length - 1  ? '' : ','); c++;
	} tabs += "]";
	Log.t.htmlText = "<textformat tabstops = '"+tabs+"' >" + 
	arguments.join('\t') + "</textformat>";
	*/
	Log.t.htmlText = arguments.join(' ');
}