2011-03-07 57 views
1

如果我有,有一个长方形的简单类:帮助与矩形的坐标空间

package 
{ 

import flash.display.Sprite; 
import flash.geom.Rectangle; 

public class Spot extends Sprite 
{ 
    private var __rect:Rectangle; 

    public function Spot() 
    { 
     init(); 
    } 

    private function init():void 
    { 
     __rect = this.getRect(this); 

    } 

    public function get rect():Rectangle{ 
      return __rect; 
    } 

} 

} 

我在舞台上的动画这个类的一个实例,并且尝试跟踪它的坐标:

package 
{ 

import flash.display.Sprite; 
import flash.events.Event; 
import flash.geom.Point; 

public class RectangleTest extends Sprite 
{ 
    public var spot:Spot = new Spot(); 
    public function RectangleTest() 
    { 
     init(); 
    } 

    private function init():void 
    { 
     addEventListener(Event.ENTER_FRAME, dynamicSpotTrace, false, 0, true);  
    } 

    private function dynamicSpotTrace(e:Event):void 
    { 
     trace(spot.rect.x, spot.rect.y, spot.rect.width, spot.rect.height); 
    } 

} 

} 

输出痕迹:

0 0 65 65 

一遍又一遍(因为现货有0,0登记点)...怎么能我重写这个,所以我可以在每帧拿到现货实例的新坐标

+0

您在动画中实际定位了哪个元素?我的意思是,如果你正在移动而不是现货,现货只是简单地移动而不是真正移动自己。 – 2011-03-07 17:06:16

+0

哦,是的,我正在移动Spot ...我希望这个矩形可以跟踪现场... – redconservatory 2011-03-07 17:32:03

回答

1

考虑到taskinoor的回答,您可以更轻松地做到这一点。

private function dynamicSpotTrace(e:Event):void 
{ 
    var rect:Rectangle = spot.getRect(stage); 
    trace(rect); 
} 
2

getRect的参数是targetCoordinateSpace(因为现货实际上是在屏幕上??移动),也就是在显示对象的坐标空间该矩形将被表示。所以我猜想,而不是this你需要传递一个对你想获得矩形的坐标系的显示对象的引用,那就是Spot的父显示对象。通过this意味着Spot将在其自身的本地坐标系中返回矩形,该坐标系始终以(0,0)为原点。如果您想要RectangleTest坐标系中的结果,那么您可以传递Spot构造函数中的引用并将其用作getRect的参数。

注意:我真的没有自己测试过,但这是我阅读手册后了解的。