Помогите с координатным пространством прямоугольника - PullRequest
1 голос
/ 07 марта 2011

Если у меня есть простой класс с прямоугольником:

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) ... как я могу переписать это, чтобы я мог получать новые координаты экземпляра Spot на каждомкадр (поскольку пятно движется по экрану ??)

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Параметром getRect является targetCoordinateSpace, то есть в котором в координатном пространстве экранного объекта будет представлен прямоугольник. Поэтому я думаю, что вместо this вам нужно передать ссылку на экранный объект, в системе координат которого вы хотите получить прямоугольник, то есть родительский экранный объект Spot. Передача this означает, что Spot вернет прямоугольник в своей собственной локальной системе координат, которая всегда имеет (0, 0) в качестве источника. Если вы хотите получить результат в RectangleTest системе координат, вы можете передать ссылку на него в Spot конструкторе и использовать его в качестве параметра getRect.

Примечание: я действительно не проверял это сам, но это то, что я понимаю после прочтения руководства.

1 голос
/ 07 марта 2011

Имея в виду ответ Taskinoor, вы можете сделать это намного проще.

private function dynamicSpotTrace(e:Event):void
{
    var rect:Rectangle = spot.getRect(stage);
    trace(rect);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...