如果我有一个有矩形的简单类:
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实例的新坐标(因为该点实际上正在穿过屏幕??)
答案 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);
}