スプライトのサイズを計算する方法は?
-
06-07-2019 - |
質問
カスタム描画を行うスプライトがありますが、スプライトを適切に配置する場所をコンテナに知ってもらいたいです。これを行うには、コンテナはスプライトの大きさを知る必要があります。 UIComponentは測定段階を通過しますが、スプライトは通過しません。スプライトのサイズを計算するにはどうすればよいですか?
編集:私はEvent.ENTER_FRAMEで描画を行っていますが、アニメーション化されているため、どれだけ大きくなるかを事前に知ることはできません。 UIComponentには測定機能があり、似たようなものを作成したいと思います。
解決
正確な答えは、私が収集できる限り、事前に伝えることはできません。サイズを決定するには、実際にスプライトに描画する必要があります。
他のヒント
スプライトは、描画したサイズを取ります。何かを描画するまで、サイズはまったくありません。アプリケーションで許可されている場合、最初に境界線(多分長方形)を描画してから、スプライトを測定できます。ただし、後で境界線の外側に描画しないでください。
また、描画する内容によっては、数学を使用して最終サイズを事前計算できる場合があります。
i.e。円を描く場合は、Mathを使用して最終的な高さ/幅を計算できます。
マイク
こちらをご覧ください-これがあなたの質問に答えることを願っています:
<?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>
これを実行すると、traceステートメントは、描画されたスプライトの高さと幅を表示します。これはランダムに生成されます。つまり、高さと幅のプロパティを照会するだけで、スプライトの高さと幅を取得できます。
スプライトの幅と高さに基づいて他のコンポーネントをレイアウトする必要があるが、実際に描画する前に、flash.display.Shapeオブジェクトに描画し、このサイズを参照として使用してから、Shapeをアタッチしますスプライト。