使用MovieClip.transform.matrix问题进行转换

时间:2009-07-02 11:13:45

标签: flash actionscript matrix transformation

在处理Flash cs4中的转换时遇到问题....

当我旋转动画片段并追踪输出时,我的动画片段的宽度也发生了变化......

5 个答案:

答案 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属性。