AS3缩放动画片段,不缩放子项

时间:2012-07-15 19:46:53

标签: actionscript-3 flash

我有一个影片剪辑,包含一个按钮和两个标签(两个闪存组件)。单击按钮时我想通过删除其中一个标签然后更改影片剪辑的高度以仅显示该按钮和第一个标签(两者都位于影片的顶部)来最小化影片剪辑。

我尝试更改影片剪辑的高度以及使用scaleY,但最终会将标签和按钮与影片剪辑一起缩放。

有没有办法只缩放电影的背景而不缩放其子节目(按钮和标签)?

谢谢!

2 个答案:

答案 0 :(得分:2)

这不会那样。缩放父级会影响所有子级 - 这是一件好事,因为它使得大型显示对象组的修改变得更加容易。

您必须更改层次结构,以便您尝试缩放的图形剪辑与标签和按钮位于同一级别 - 只需创建一个新的MovieClip并将所有四个元素(图形,按钮,标签)放在其中它

答案 1 :(得分:2)

我同意weltraumpirat,孩子与父母一起伸缩是一种正确的行为。如果您无法将它们移出父项,您可以考虑使用以下伪代码来撤消父项对子项的影响:

public class ParentClip extends MovieClip
{
    // Consider moving all of those unscalable clips into this MovieClip so you would not have to process them individually
    public var clipsDoNotScale:MovieClip;

    public override function set scaleX(value:Number):void
    {
        var previousValue:Number = super.scaleX;
        super.scaleX = value;

        if ( previousValue != value && clipsDoNotScale )
        {
            clipsDoNotScale.scaleX = 1 / value;

            //Proportionally move the clip too
            clipsDoNotScale.x *= value / previousValue;
        }
    }

    public override function set scaleY(value:Number):void
    {
        var previousValue:Number = super.scaleY;
        super.scaleY = value;

        if ( previousValue != value && clipsDoNotScale )
        {
            clipsDoNotScale.scaleY = 1 / value;

            //Proportionally move the clip too
            clipsDoNotScale.y *= value / previousValue;
        }
    }
}