0

カスタム描画を行うスプライトがありますが、スプライトを適切に配置する場所をコンテナーに認識させたいと考えています。これを行うには、コンテナはスプライトの大きさを知る必要があります。UIComponents は測定ステージを通過しますが、スプライトは通過しません。スプライトのサイズを計算するにはどうすればよいですか?

編集: Event.ENTER_FRAME で描画を行っていますが、アニメーション化されているため、事前にどのくらいの大きさになるかわかりません。UIComponent には測定機能があり、同様のものを作成したいと思います。

4

5 に答える 5

2

正確な答えは、私が収集できる限り、事前に判断することはできません。スプライトのサイズを決定するには、実際にスプライトに描画する必要があります。

于 2009-01-11T20:46:09.557 に答える
1

また、描画する内容によっては、数学を使用して最終的なサイズを事前に計算できる場合があります。

つまり、円を描く場合は、数学を使用して最終的な高さ/幅を計算できます。

マイク

于 2009-04-12T17:56:40.387 に答える
1

スプライトは、描画したサイズになります。何かを描画するまで、サイズはまったくありません。アプリケーションで許可されている場合は、最初に境界線 (おそらく長方形) を描画してから、スプライトを測定できます。ただし、後で境界の外に描画しないでください。

于 2009-01-08T21:30:06.293 に答える
0

ここを見てください - これがあなたの質問に答えてくれることを願っています:

<?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 ステートメントに表示されます。つまり、高さと幅のプロパティを照会するだけで、スプライトの高さと幅を取得できます。

于 2009-01-08T21:53:45.280 に答える
0

スプライトの幅と高さに基づいて他のコンポーネントをレイアウトする必要があるが、実際に描画する前に、flash.display.Shape オブジェクトに描画し、このサイズを参考にしてから、シェイプをスプライトにアタッチすることができます。

于 2009-01-15T11:02:13.507 に答える