1

我有一个 MovieClip 对象,它在 .swc 文件中为动作脚本 (AS3) 导出。

当我将剪辑的一个实例放置在舞台上而不做任何修改时,它会出现在左上角,大约离舞台一半(即只有对象的右下象限可见)。我知道这是因为剪辑的注册点不是左上角。

如果您在影片剪辑上调用 getBounds() ,您可以获得剪辑的边界(大概从它对齐的“点”开始),它看起来像(左:-303,上:-100,右:303,下: 100),您可以从剪辑 x 和 y 中减去 left 和 top 值:

clip.x -= bounds.left;
clip.y -= bounds.top;

这似乎正确地将剪辑在舞台上完全对齐,剪辑的左上角正好位于舞台的角落。

但!将其对准舞台中央时,遵循该逻辑似乎不起作用!

clip.x = (stage.stageWidth / 2);
etc...

这创造了一个疯狂的平行宇宙,剪辑现在位于舞台的右下角。

我唯一的线索是看:

clip.transform.matrix

clip.transform.concatenatedMatrix
  • 矩阵的 tx 值为 748(舞台高度的一半) ty 值为 426(舞台高度的一半)

  • concatenatedMatrix 的 tx 值为 1699.5, ty 值为 967.75

显然,这也是影片剪辑的位置,但为什么呢?这个额外的翻译来自哪里?

4

1 回答 1

1

我相信我已经解决了这个问题。

似乎当舞台没有设置为特定尺寸时,舞台上的项目(或在我的情况下是这个特定的矢量对象)的比例是相对于一些预设的比例/尺寸(我不确定的起源 - - 通过一些测试,它看起来受舞台比例和尺寸的影响)。

增加舞台的大小会增加缩放值,即使您明确设置 x/y/width/height价值观。

(注意:不仅仅是动态调整大小。调整窗口大小,以新大小关闭和重新打开窗口会产生相同的行为)

我怀疑这只发生在矢量对象上?

无论如何,解决方法是将舞台设置为明确的宽度和高度。然后对象的平移和缩放似乎使用了一个身份父矩阵,并且一切都像您期望的那样工作。

于 2010-03-19T20:47:11.680 回答