globalToLocal3D
forked from globalToLocal3D test (diff: 68)
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jNEb
*/
package
{
import flash.events.Event;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.*;
public class FlashTest extends Sprite
{
public var SW:Number = new Number( stage.stageWidth );
public var SH:Number = new Number( stage.stageHeight );
public var SD:Number = new Number( 1000 );
private var rectSp:Rect;
private var absZero2D:Point;
private var absZero3D:Vector3D;
public function FlashTest()
{
absZero2D = new Point( 0,0 );
absZero3D = new Vector3D( absZero2D.x,absZero2D.y,(SD/2)+0 );
//absZero3D = new Vector3D( stage.globalToLocal3D(absZero2D).x,stage.globalToLocal3D(absZero2D).y,0 );
rectSp = new Rect();
rectSp.x = SW - absZero3D.x - rectSp.width; // (stage.stageWidth /2);// - (rectSp.width /2); // (stage.stageWidth/2) + (rectSp.width /2);
rectSp.x = rectSp.x - (SW/2);
rectSp.y = SH - absZero3D.y - rectSp.height; // (stage.stageHeight /2);// - (rectSp.height /2); // (stage.stageHeight/2) + (rectSp.height/2);
rectSp.y = rectSp.y - (SH/2);
rectSp.z = 0;
this.addChild(rectSp);
//rectSp.rotationY = 45;
//rectSp.rotationX = 35;
stage.addEventListener( Event.ENTER_FRAME,loop );
function loop( event:Event ):void
{
this.rotationY = rotationY++;
}
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
private function mouseDownHandler(e:MouseEvent):void
{
var p:Point = new Point(stage.mouseX, stage.mouseY);
var pos3d:Vector3D = rectSp.globalToLocal3D(p);
var dot:Dot = new Dot();
pos3d = Sprite(rectSp).transform.matrix3D.transformVector(pos3d);
dot.x = pos3d.x;
dot.y = pos3d.y;
dot.z = pos3d.z;
this.addChild(dot);
}
}
}
import flash.display.Sprite;
import flash.display.Graphics;
internal class Dot extends Sprite
{
public function Dot(color:int = 0xff0000, size:Number = 20){
var g:Graphics = this.graphics;
g.beginFill(color);
g.drawCircle(0,0,size);
g.endFill();
}
}
internal class Rect extends Sprite
{
public function Rect(){
var g:Graphics = this.graphics;
var size:Number = 200;
g.beginFill(0x00ff00);
g.drawRect(-size/2,-size/2,size, size);
g.endFill();
}
}