2012-08-24 36 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

谢谢!这工作。 –