显示对象的AS3可见边界不一致地偏移

时间:2012-08-24 00:47:10

标签: actionscript-3

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

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 个答案:

答案 0 :(得分:1)

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

this.stage.scaleMode = "noScale";

然后设置一些对齐规则:

this.stage.align = "TL";

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