缩放容器不会影响子容量

时间:2011-05-26 15:57:14

标签: actionscript-3 width containers scaling

我有一个容器(sprite),其中添加了子(sprite)。 当我缩放容器时,我想获得一个孩子的新宽度,但是当我追踪孩子的宽度时,我总是得到原始尺寸,即使所有内容都按照它应该进行视觉缩放。 如何覆盖子宽度?

更新: 我刚刚发现children.graphics-“维度”可能导致了这个问题。当我离开图形时,一切似乎都没问题。是否可以与子精灵同时缩放图形?

3 个答案:

答案 0 :(得分:0)

子宽度始终是原始的满量程值。如果要获取当前宽度,只需将该值乘以容器的缩放比例。

因此,例如,如果您的子宽度为100像素,并且您将容器缩放到一半大小:100像素* 0.5 = 50像素。或者使用代码:actualChildWidth = container.scaleX * child.width;

答案 1 :(得分:0)

我还建议使用显示对象变换的concatenatedMatrix。这将返回一个2D变换矩阵,将对象的父链向上乘以根级别。

获得生成的Matrix对象后,可以检查其ad属性,以分别查看其根级x和y缩放系数。

答案 2 :(得分:0)

您可以使用DisplayObject.transform.pixelBounds.widthDisplayObject.transform.pixelBounds.height来获取子显示对象的宽度和高度,如下所示:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var squaresXml:XML = 

            <squares>
                <square name="redSquare" color="0xFF0000" />
                <square name="blueSquare" color="0x00FF00" />
                <square name="greenSquare" color="0x0000FF" />
            </squares>;

            var size:Number = 100;

            var squares:Sprite = new Sprite();

            for (var i:uint = 0; i < squaresXml.children().length(); i++)
            {
                var square:Square = new Square(squaresXml.square[i].@color, size);
                square.name = squaresXml.square[i].@name;
                square.x = i * size;
                squares.addChild(square);

            }// end for

            addChild(squares);

            squares.scaleX = squares.scaleY = 2;

            var redSquare:Square = squares.getChildByName("redSquare") as Square;
            trace(redSquare.width); // output: 100
            trace(redSquare.transform.pixelBounds.width); // output : 200;

        }// end function

    }// end class

}// end package

import flash.display.Shape;
import flash.display.Sprite;

internal class Square extends Shape
{
    public function Square(color:uint, size:Number)
    {
        graphics.beginFill(color);
        graphics.drawRect(0, 0, size, size);
        graphics.endFill();

    }// end function

}// end class

DisplayObject.transform.pixelBounds基本上得到一个“Rectangle对象,用于定义舞台上显示对象的边界矩形”。