我在处理 Flash cs4 中的变换时遇到问题 ....
当我旋转我的电影剪辑并跟踪输出时,我的电影剪辑的宽度也发生了变化......
我在处理 Flash cs4 中的变换时遇到问题 ....
当我旋转我的电影剪辑并跟踪输出时,我的电影剪辑的宽度也发生了变化......
我意识到这是一个相当老的帖子,所以如果这违反了关于 necroposting 的论坛礼仪或其他任何事情,我深表歉意。然而,这是谷歌搜索一个相当微不足道的问题的第一个结果,似乎并没有真正提供一种体面的方法来检索显示对象的未旋转宽度或高度。
问题是,通过询问宽度和高度,您似乎获得了对象的全局边界,而当您想要的是局部边界时,您就是这样做的:(只需将整个内容复制并粘贴到闪存中文件并编译以了解我的意思)。
import flash.display.Sprite;
var spr=new Sprite()
spr.graphics.beginFill(0xff0000);
spr.graphics.drawRect(-25,-100,50,200);
addChild(spr);
spr.y=150
spr.x=300
function myOEF(e)
{
spr.rotation++
trace(spr.width,spr.height);
var bounds=spr.getBounds(this)
trace("A: Global bounds: "+bounds);
var bounds=spr.getBounds(spr)
trace("B: Local bounds: "+bounds);
}
addEventListener("enterFrame",myOEF);
这是 Flash 播放器中的一个错误。您可以做几件事:
选项1(可能是最好的方法):
创建 MovieClip 的子类并覆盖宽度和高度的 get 和 set 方法。让 setter 调用 super,并将值存储为私有变量(例如 _width/_height) 当调用 get 时,返回您的私有变量。由于您使用的是矩阵,因此请覆盖 get 和 set 矩阵函数,使用新函数设置缩放因子,并在调用 super 之前将它们设置为不缩放。 为什么会这样: setter 不受此错误的影响。
选项 2:
使用 scaleX/scaleY 来获取宽度/高度,并乘以宽度和高度值,旋转 0,缩放 1.0。 为什么会这样: scaleX/scaleY 不受此错误的影响。
快乐编码!
好的..我的坏..我最终看到了我的错误:)。 我之前确信这是一个错误。尽管布兰登是对的,但我仍然觉得它很混乱。这最终是一个示例,表明 Branden 是正确的,并且最后两个值之间没有差异。
var box = new Sprite();
box.graphics.beginFill(0xFF0000);
box.graphics.drawRect(0, 0, 100, 100);
this.addChild(box);
trace(box.width);
box.rotation = 45;
trace(box.width);
box.width = 141.4;
trace(box.width);
编辑:您仍然可能想查看 PiPeep 的链接表单 grantskinner 描述了我想在上面证明的内容,但成功(在 Flash CS3 - AS3 中) - http://www.gskinner.com/blog/archives/2007/08 /annoying_as3_bu.html
旋转剪辑时,宽度/高度会发生变化。如果您不想要这种行为,请改用 scaleX/scaleY 属性。
我不确定为什么这是一个问题 - 这是预期的行为。剪辑的宽度是从最左边到最右边的实际像素数 - 如果旋转剪辑,它将改变。如果您的剪辑中有一个子剪辑,则该剪辑的宽度不会改变,因为它的旋转可能不会改变。