Как рассчитать размер спрайта?
-
06-07-2019 - |
Вопрос
У меня есть спрайт, в котором я делаю некоторые пользовательские отрисовки, но я бы хотел, чтобы контейнер знал, где правильно расположить спрайт.Чтобы сделать это, контейнер должен знать, насколько велик спрайт.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 к Спрайт.