1

我正在使用这个功能,改编自 Plastic Sturgeon (http://plasticsturgeon.com/2010/09/as3-get-visible-bounds-of-transparent-display-object/) 来获取显示对象的可见边界。

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,然后对于大于该范围的舞台尺寸,它会随着舞台尺寸快速上升。偏移量也因我更改舞台尺寸的内容而异,例如,如果我分阶段从 400 像素变为 1000 像素,在其间测试电影,边界偏移与我一次从 400 像素变为 1000 像素的情况不同,或没有在中间阶段测试电影。有时偏移量只随一个维度变化,而另一个维度不做任何事情。发布的文件也与测试不同。我尝试将函数放在与显示对象相同的文件中,而不是放在外部文件中,但这仍然不可靠。我想知道是否有一些修复可以可靠地为我提供显示对象的实际可见边界,无论舞台大小和所有其他内容如何。

我的计算机运行 Windows Vista Home Premium 32 位,我使用的是 Adob​​e Flash Professional CS5.5。

4

1 回答 1

1

这可能是一个可以通过设置一些舞台属性来解决的问题。首先尝试将舞台设置为不缩放:

this.stage.scaleMode = "noScale";

然后设置一些对齐规则:

this.stage.align = "TL";

如果这有帮助,则可能是您的位图复制遇到了缩放错误的一些问题。

于 2012-08-24T03:49:40.397 回答