Масштабирование контейнера не влияет на ширину дочернего элемента - PullRequest
1 голос
/ 26 мая 2011

У меня есть контейнер (спрайт) с добавленными дочерними элементами (спрайтами). Когда я масштабирую контейнер, я хотел бы получить новую ширину дочернего элемента, но когда я прослеживаю ширину дочернего элемента, я всегда получаю исходные размеры, даже если все визуально масштабируется, как и должно быть. Как мне переписать дочернюю ширину?

Обновление: Я только что узнал, что children.graphics- «размеры» могли быть причиной проблемы. Когда я оставляю графику, все кажется хорошо. Можно ли масштабировать графику одновременно с дочерним спрайтом?

Ответы [ 3 ]

0 голосов
/ 26 мая 2011

Я бы также рекомендовал использовать concatenatedMatrix преобразования вашего экранного объекта. Это вернет матрицу двумерного преобразования, умноженную на родительскую цепочку объекта до корневого уровня.

Получив полученный объект Matrix, вы можете проверить его свойство a или d, чтобы увидеть его масштабные коэффициенты x и y корневого уровня соответственно.

0 голосов
/ 26 мая 2011

Вы можете использовать DisplayObject.transform.pixelBounds.width или DisplayObject.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 объект, которыйопределяет ограничивающий прямоугольник экранного объекта на сцене ".

0 голосов
/ 26 мая 2011

Ширина дочерних элементов всегда будет такой же, как у исходных значений полной шкалы. Если вы хотите получить их текущую ширину, просто умножьте значение на коэффициент масштабирования контейнера.

Например, если ширина вашего дочернего элемента равна 100 пикселям, а контейнер масштабирован до половины размера: 100 пикселей * 0,5 = 50 пикселей. Или с кодом: actualChildWidth = container.scaleX * child.width;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...