Вопрос

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

Редактировать: Я рисую в Event.ENTER_FRAME , и он анимированный, поэтому я не могу заранее сказать, насколько большим он будет.UIComponent имеет функцию измерения, и я хотел бы создать что-то подобное.

Это было полезно?

Решение

Точный ответ, насколько я могу понять, состоит в том, что вы не можете сказать заранее, вы должны нарисовать спрайт, чтобы определить его размер.

Другие советы

Спрайты принимают размер, который вы в них рисуете. Он вообще не имеет размера, пока вы не нарисуете в нем что-то. Если ваше приложение позволяет, вы можете сначала нарисовать границу (возможно, прямоугольник), а затем измерить спрайт. Но не рисуйте за пределами границ позже.

Кроме того, в зависимости от того, что вы рисуете, вы можете использовать математику для предварительного расчета конечного размера.

т. е.если вы рисуете круг, вы могли бы использовать математику, чтобы вычислить конечную высоту / ширину.

майк

Посмотрите здесь - надеюсь, это ответит на ваш вопрос:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:Script>
        <![CDATA[

            import mx.core.UIComponent;

            private var s:Sprite;
            private var w:UIComponent;

            override protected function createChildren():void
            {           
                super.createChildren();

                if (!s)
                    s = getSprite();

                w = new UIComponent();

                trace("The sprite measures " + s.width + " by " + s.height + ".");

                w.addChild(s);
                box.addChild(w);
            }

            private function getSprite():Sprite
            {
                var s:Sprite = new Sprite();
                s.graphics.lineStyle(1, 0xFFFFFF);
                s.graphics.beginFill(0xFFFFFF, 1);
                s.graphics.drawRect(0, 0, Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000));
                s.graphics.endFill();

                return s;
            }

        ]]>
    </mx:Script>

    <mx:Box id="box" backgroundColor="#FFFFFF" />

</mx:Application>

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

Если вам нужно расположить некоторые другие компоненты на основе ширины и высоты Sprite, но перед тем, как на самом деле нарисовать его, вы можете нарисовать объект flash.display.Shape, использовать этот размер в качестве ссылки, а затем прикрепить Shape к Спрайт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top