【问题标题】:AS3 depth sorting with extras带有附加功能的 AS3 深度排序
【发布时间】:2013-09-01 22:10:05
【问题描述】:

我最近在我的程序中遇到了深度排序问题。基本上,我对每一帧进行排序。排序应该注意实际上是 scaleX 和 scaleY 的“深度”(它们总是相同的,所以我只是在看 scaleX),所以那些具有较大 scaleX 的元素应该高于那些具有较低但还要检查的元素y 值,然后排序。一言以蔽之:先在 scaleX 上排序,然后在 Y 上排序。有什么建议我该如何编写这样的排序函数?

编辑: 我写了这个函数,如果两个显示对象不在同一个“深度”(scaleX)中,那么它们就会相互交换。

public static function sortEverythingInContainer(container:DisplayObjectContainer, fromIndex:int = 1) {
        var i : int = 0;
        var j : int = 0;
        var n : int = container.numChildren;
        var child1:DisplayObject;
        var child2:DisplayObject;
        for (i = fromIndex; i < n; ++i){
            j = i;

            child1 = container.getChildAt(j);
            child2 = container.getChildAt(j - 1);
            while (j > fromIndex-1 && (child1.scaleX < child2.scaleX?false:child1.y < child2.y)) {
                container.swapChildren(child1, child2);
                --j;
                if (j <= fromIndex-1)
                    break;
                child1 = container.getChildAt(j);
                child2 = container.getChildAt(j - 1);  
            }

        }
    }

解决方案:
我必须通过为循环创建 2 来排序两次,首先根据 Y 进行排序,然后进行缩放。 在此输入代码

【问题讨论】:

    标签: actionscript-3 depth


    【解决方案1】:

    如果我理解你的话,你可以使用这样的东西:

     arr.sortOn("scaleX",  Array.NUMERIC); 
     arr.sortOn("y",  Array.NUMERIC); 
    

    参考:http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fa4.html

    【讨论】:

    • 我是使用显示列表来排序的,所以我没有任何数组。有什么想法吗?
    • @Zhafur 在类似的情况下,我创建了一个带有引用的数组并以这种方式对它们进行排序
    • 检查了您的方法,甚至尝试使用数组作为属性,但更糟糕的是,因为显示对象一直相互重叠。
    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2012-11-06
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多