2011-03-07 87 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的參數。

注意:我真的沒有自己測試過,但這是我閱讀手冊後瞭解的。