0

私の問題は、X、Y値に基づいたアイソメトリックグリッドがあることです。たとえば、道路などのボタンをクリックするたびに、このアイテムがarray()にプッシュされます。

 //
 addChild(roadTiles);
 gameAssets.push(roadTiles);
 arrangeAssets();
 //

私のarrangeAssetsメソッドは、配列をチェックするだけです。「ほとんどの場合失敗するため、ポイントの投稿はありません。通常、一部のアイテムは更新されますが、すべてではありません。したがって、誰かがX、Y値をチェックしてから、配列のsetChildIndexをチェックするソリューションがあることを期待しています。私は自分で作り、理解を深めたいので、興味のないサードパーティのas3エンジンを参照し続けてください。

ここに画像の説明を入力してください

または、X、Yグリッドのみを使用しているため、これは不可能ですか?

    arrangeAssets();{
var i:int = gameAssets.length;
while(i--){
    if (getChildIndex(sortedItems[i]) != i) {
        gameAssets.sortOn("y", Array.NUMERIC);
        setChildIndex(gameAssets[i], i);
    }
    }

グラスグリッドの上にあるアイテムのみを配列に追加します。

4

1 に答える 1

1

左端のポイントがx: 0, y:0タイルがお互いを覆っていると仮定すると、高値xと低値yから低値xと高値になりyます。

私は変数を追加しweight(あなたが好きなものと呼びます)、それをから計算します(totalx - x) * y

これにより、最上部のコーナーの値は0になり、最下部のコーナーの値が最も高くなります。すべての行(実際には対角線)は同じになります。

次に、で並べ替えるとweight、相対的なzスタック内のアイテムのリストが表示されます。

そこに2つのアイテムを含めることはできないため、これは実際にはsetchildIndexに対応していません。ハックは、すべてを削除して、順番に追加し直すことです。(子として追加する一時的な子を持つことができます。そうすれば、自動的に行われるため、子を削除する必要はありません)

http://www.kirupa.com/developer/isometric/depth_sorting.htmからのweightasを示すこの画像を見つけました_y

ここに画像の説明を入力してください ここに画像の説明を入力してください

(totalx - x) * y水平方向の値が同じであるため、_yは同じです

于 2012-04-05T16:48:09.200 に答える