【问题标题】:as3 get width of resized movieclipas3 获取调整大小的影片剪辑的宽度
【发布时间】:2025-12-15 10:25:01
【问题描述】:

我有一个在时间轴中手动缩放的影片剪辑。

我现在正在尝试使用动作脚本获取 WIDTH 和 HEIGHT,以便我可以将另一个 movieClip 加载到其中并使其大小相同。

但是,当我执行以下代码时,我无法正确定位它,因为比例尺是 WIDTH,而 HEIGHT 显示的是原始尺寸而不显示缩放后的尺寸坐标。因此,当我将新剪辑放入其中时,我无法使其与重新缩放的剪辑具有相同的宽度和高度;

ScaledMC.addChild(myMC);
myMC.x = - ScaledMC.width /2; //Because the MC registration is in the center

解决方法可能是一些代码来检测剪辑边界的 x 和 y 位置以及它们在舞台上的位置。

感谢您的宝贵时间。

更新:2012 年 4 月 25 日

我正在发布我正在尝试做的事情的完整代码,包括 FLA。当您单击女孩时,我需要她加载到另一个电影剪辑中。然而,影片剪辑是按比例缩放的,所以当她加载时,她的位置会突然改变。我需要它看起来像她没有移动并留在同一个地方。

import flash.geom.Rectangle;

var Girlx = Girl.x;
var Girly = Girl.y;

var b:Rectangle;
b = Room.ChalkBoard.getBounds(this);


trace(b);


Room.ChalkBoard.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event:MouseEvent):void
{
    Room.ChalkBoard.startDrag();
}

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    Room.ChalkBoard.stopDrag();
    b = Room.ChalkBoard.getBounds(this);
}



Girl.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
    //Room.ChalkBoard.scaleX = 1;
   // Room.ChalkBoard.scaleY = 1;
    Room.ChalkBoard.addChild(Girl);


    // I NEED TO KNOW HOW TO SCALE GIRL BACK TO SAME SIZE
    // EXAMPLE:

Girl.scaleY = 1 + Room.ChalkBoard.scaleY;

Girl.scaleX = 1 + Room.ChalkBoard.scaleX;
Girl.x = Girlx - b.x; /// This formula works if Room is at scaleX is 1;
Girl.y = Girly - b.y;  /// This formula works if Room is at scaleY is 1;


}

这里是 FLA:http://www.EdVizenor.com/Girl.fla

【问题讨论】:

    标签: actionscript-3 flash width movieclip


    【解决方案1】:

    如果您的问题是您缩放影片剪辑并想要使用原始尺寸(我认为这就是您所说的),那么您可以尝试以下操作:

    ScaledMC.addChild(myMC); 
    myMC.x = - (ScaledMC.width/ScaledMC.scaleX) /2; 
    

    请注意,我添加了一个用于缩放影片剪辑对象本身的因子

    【讨论】:

    • 我会试试的。非常感谢。我也用手在时间轴上缩放它。那是我这篇文章的第一句话。也许我使用了错误的术语。
    • 哦,好的。我不确定你的意思,但我现在明白了。所以是的,您正在更改其比例属性(scaleXscaleY)。我编辑了答案以删除询问您如何缩放的部分。
    【解决方案2】:

    您可以访问转换 Matrix,它表示您使用 IDE 缩放的对象,以计算出您缩放了多少。您要查看的Matrix 的关键属性是a 用于x 比例,d 用于y 比例。

    演示:

    var matrix:Matrix = ScaledMC.transform.matrix;
    trace(matrix.a, matrix.d);
    

    然后,您可以使用这些值来缩放额外的 MovieClip,或者您需要做的任何事情。

    奖励:有一个功能:

    function getScale(target:DisplayObject):Object
    {
        var mtx:Matrix = target.transform.matrix;
    
        return {
            scaleX: mtx.a,
            scaleY: mtx.d
        }
    }
    
    
    // Get scaleX of ScaledMC.
    trace(getScale(ScaledMC).scaleX);
    

    【讨论】:

    • 谢谢马蒂。我认为我的主题行不清楚。在帖子中,我使我的问题更加清楚。我需要缩放名为“Girl”的影片剪辑并将其保持在她所在的影片剪辑中的相同位置,而实际上她被移动到另一个影片剪辑中。但她留在同一个地方。我能说的最好的就是下载上面的FLA并运行它并点击那个女孩。她移动了,即使她被放在一个缩放的电影剪辑中,她也应该留在同一个地方。
    • @PapaDeBeau 你的意思是当你缩放女孩时,她正在远离应该是固定的左上角位置吗?如果是这种情况,您的问题完全与您分配给该符号的注册点不完全是左上角有关。
    • 是的,她应该保持不动。我可以将她保持在固定位置,但问题是因为她加载的剪辑已被缩放,因此她也被缩放并相应地移动。秤导致了这个问题。演示:edvizenor.com/Gril.html
    • @PapaDeBeau 在这一点上我所能建议的就是重新考虑如何在项目中构建显示树。
    • 感谢您的宝贵时间。我相信这不是树或位置的问题。它是一个规模问题。当我将 Girl mc 加载到 Scaled 影片剪辑中时,她也会被缩放。我需要她进去,但尺寸保持不变。
    最近更新 更多