![](/img/trans.png)
[英]flash as3 sortOn - sorting an array by another array's position
[英]Flash AS3 Array and Sorting
我的問題是我有一個等距網格,僅基於 X、Y 值:每次單擊按鈕(例如道路)時,都會將此項推送到數組()
//
addChild(roadTiles);
gameAssets.push(roadTiles);
arrangeAssets();
//
我的 arrangeAssets 方法只檢查數組“沒有意義的發布,因為它在大多數時間都失敗了。一般來說,一些項目更新但不是全部。所以我希望有人有一個解決方案來檢查 X,Y 值然后設置數組的 setChildIndex。我看過,不斷被推薦給我不感興趣的第 3 方 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);
}
}
我只將草網格頂部的項目添加到數組中。
假設最左邊的點是x: 0, y:0
瓦片相互覆蓋,從高x
和低y
到低x
和高y
值。
我會添加一個weight
變量(你喜歡怎么稱呼它),然后從(totalx - x) * y
計算它
這將使最頂角的值為 0,而最底角的值為最高。 每一行(實際上是對角線)都是一樣的。
然后按weight
排序,您將在相對 z 堆棧中得到一個項目列表。
這並沒有真正解決 setchildIndex,因為那里不能有兩個項目。 一種破解方法是刪除所有內容並將它們重新添加到訂單中。 (你可以有一個臨時孩子,你將其添加為孩子,這樣你就不必刪除孩子,因為它是自動完成的)
我從http://www.kirupa.com/developer/isometric/depth_sorting.htm找到了這張顯示weight
為_y
的圖片
_y 是相同的,因為(totalx - x) * y
水平值相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.