1

BorderContainer内にSnapToGrid機能を提供する必要があります。すべての機能は完了しましたが、グリッドの描画という1つの問題で立ち往生しています。

  1. Creation_Completeイベントを使用して試行しましたが、正常に機能しますが、子が追加されるとすぐにグリッドが消えます。

  2. updateDisplayListをオーバーライドする-これはこれまでのところ最良のオプションでした(すべてが正常に機能します)が、問題は、内部のコントロールを移動するとき(または移動するとき)(ObjectHandlesライブラリを使用)に、グリッドを再描画するupdateDisplayListメソッドが呼び出されることです->移動プロセスが非常に遅くなります。

これが私がグリッドを埋める方法です。

numRows = Math.ceil(this.unscaledHeight/gridSize);
numCols = Math.ceil(this.unscaledWidth/gridSize);

this.graphics.beginFill(0x000000, 1.0);

for (var i:int= 0; i < numRows; i++)
{               
    for (var j:int = 0; j < numCols; j++)
    {       

        this.graphics.drawCircle(j * gridSize, i * gridSize, 1);
    }
}

this.graphics.endFill();

一度だけ描きたいのですが、コンテナのサイズが変更されたときにだけ描きます。これを達成するのに役立つイベントはありますか?または、グリッドを描画するのに役立つ効率的な方法はありますか?コメントや提案は大歓迎です。事前に感謝します:)

4

1 に答える 1

2

updateDisplayList()unscaledWidthunscaledHeightをパラメータとして持つメソッドです。

したがって、次の方法で不要な再描画を回避できます。

private var previousUnscaledWidth:Number;
private var previousUnscaledHeight:Number;

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    …
    if (unscaledWidth != previousUnscaledWidth || unscaledHeight != previousUnscaledHeight)
    {
        // Your drawing routine here

        previousUnscaledWidth = unscaledWidth;
        previousUnscaledHeight = unscaledHeight;
    }
}

このコードはUIComponent、基本クラスとして持つカスタムActionScriptコンポーネント内に配置できます。そして、このグリッドをBorderContainer内に配置します。

<s:BorderContainer>
    <MyGrig left="0" right="0" top="0" bottom="0" />
    <!-- Another container's content here -->
</s:BorderContainer>
于 2011-04-11T12:52:27.973 に答える