2012-08-24 64 views
1

我正在使用此函數,它是根據Plastic Sturgeon(http://plasticsturgeon.com/2010/09/as3-get-visible-bounds-of-transparent-display-object /)來獲取顯示對象的可見邊界。AS3顯示對象的可見邊界偏移不一致

public static function getVisibleBounds(source:DisplayObject):Rectangle 
{ 
    var matrix:Matrix = source.transform.concatenatedMatrix;  
    var data:BitmapData = new BitmapData(1000, 1000,true,0x00000000); 
    data.draw(source, matrix); 
    var bounds:Rectangle = data.getColorBoundsRect(0xFFFFFFFF,0x000000,false); 
    data.dispose(); 
    return bounds; 
} 

然而,邊界從物體的偏移,這取決於階段大小。它適用於默認的舞臺尺寸(550px×400px),但是當任何一個尺寸增加時,它會向與該尺寸相反的方向移動(當x增加時,它向左偏移物體,並且當y增加時,它從物體向下偏移。)它並不一致。偏移量(舞臺尺寸)是非線性的,因爲對於一定範圍的舞臺尺寸它是0,那麼對於大於該範圍的舞臺尺寸,它隨着舞臺尺寸快速上升。偏移也是不同的,這取決於我改變了舞臺尺寸,例如,如果我分階段地從400px變爲1000px,在兩者之間測試影片,則邊界的偏移量不同,如果我一次從400px變爲1000px,或者不在中間階段測試影片。有時偏移只會隨着一個維度而變化,而另一維度則不會做任何事情。此外,發佈的文件與測試不同。我嘗試將該函數放置在與顯示對象相同的文件中,而不是放在外部文件中,但這仍然不可靠。我想知道是否有一些修正可以可靠地給我顯示對象的實際可見邊界,而不管舞臺大小和所有其他的東西。

我的電腦運行Windows Vista Home Premium 32位,我使用的是Adobe Flash Professional CS5.5。

回答

1

這可能是一個問題,可以通過設置一些舞臺屬性來解決。首先嚐試設置階段不按比例:

this.stage.scaleMode = "noScale"; 

然後設置一些調整規則:

this.stage.align = "TL"; 

是否有幫助,這可能是因爲您的位圖複製正在運行與縮放錯誤的一些問題。

+0

謝謝!這工作。 –