0

我的问题是我有一个等距网格,仅基于 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);
    }
    }

我只将草网格顶部的项目添加到数组中。

4

1 回答 1

1

假设最左边的点是x: 0, y:0瓷砖相互覆盖,从高值x和低值y到低值x和高y值。

我会添加一个weight变量(你喜欢怎么称呼它),然后计算它(totalx - x) * y

这将使最顶角的值为 0,而最底角的值最高。每一行(实际上是对角线)都是一样的。

然后排序weight,你有一个相对 z 堆栈中的项目列表。

这并没有真正解决 setchildIndex,因为那里不能有两个项目。一个黑客将删除所有并按顺序添加它们。(您可以有一个临时孩子,将其添加为孩子,这样您就不必删除孩子,因为它是自动完成的)

我发现这张图片显示weight_y来自http://www.kirupa.com/developer/isometric/depth_sorting.htm

在此处输入图像描述 在此处输入图像描述

_y 是相同的,因为(totalx - x) * y水平方向的值相同

于 2012-04-05T16:48:09.200 回答