帮助处理Rectangle的坐标空间

时间:2011-03-07 17:01:09

标签: actionscript-3 coordinates

如果我有一个有矩形的简单类:

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

一遍又一遍(因为Spot的注册点为0,0)...我怎样才能重写这个以便我可以在每一帧获得Spot实例的新坐标(因为该点实际上正在穿过屏幕??)

2 个答案:

答案 0 :(得分:2)

getRect的参数是targetCoordinateSpace,即矩形将在其中显示的显示对象的坐标空间。所以我猜你需要传递一个引用,而不是this,你需要传递一个对象,你想要得到矩形的坐标系,就是Spot的父显示对象。传递this意味着Spot将在其自身的局部坐标系中返回矩形,该坐标系始终以(0,0)为原点。如果您希望结果位于RectangleTest坐标系中,则可以在Spot构造函数中传递该引用,并将其用作getRect的参数。

注意:我自己并没有对此进行测试,但这是我在阅读本手册后所理解的。

答案 1 :(得分:1)

考虑到taskinoor的回答,你可以更容易地做到这一点。

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