在处理Flash cs4中的转换时遇到问题....
当我旋转动画片段并追踪输出时,我的动画片段的宽度也发生了变化......
答案 0 :(得分:1)
这是Flash播放器中的一个错误。你可以做一些事情:
选项1(可能是最好的方式):
创建MovieClip的子类并覆盖width和height的get和set方法。 让setter调用super,并将值存储为私有变量(例如_width / _height) 调用get时,返回私有变量。 由于您使用矩阵,覆盖get和set矩阵函数,使用新函数设置缩放因子,并在调用super之前将它们设置为不缩放。 为什么会这样:设置者不受此错误的影响。
选项2:
使用scaleX / scaleY代替获取宽度/高度,然后乘以宽度和高度值0旋转,1.0比例。 为什么会这样: scaleX / scaleY不受此错误的影响。
快乐的编码!
答案 1 :(得分:1)
好......我的坏......我最终看到了我的错误:)。 我确信这是一个错误。虽然布兰登是对的,但我仍然觉得它很混乱。这最终是一个例子,表明Branden是正确的,最后2个值之间没有差异。
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
答案 2 :(得分:1)
我意识到这是一个非常古老的帖子,所以我很抱歉,如果这打破了necroposting的论坛礼仪或者什么。然而,这是谷歌搜索一个相当微不足道的问题的第一个结果,并没有真正提供一个检索显示对象的未旋转宽度或高度的体面方式。
问题在于,通过询问宽度和高度,你似乎得到了对象的全局边界,当你想要的是本地边界时,你就是这样做的:(只需复制并粘贴整个东西)进入flash文件并编译看我的意思。)
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);
答案 3 :(得分:0)
我不确定为什么这是一个问题 - 这是预期的行为。剪辑的宽度是从最左边到最右边的实际像素数 - 如果剪辑被旋转,则会改变。如果你的剪辑中有一个子剪辑,那个剪辑的宽度不会改变,因为它的旋转可能不会改变。
答案 4 :(得分:0)
宽度/高度会发生变化。如果您不想要此行为,请改用scaleX / scaleY属性。