Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сортировка глубины по диагонали (http://www.flasher.ru/forum/showthread.php?t=187875)

Tetraeon 25.11.2012 19:07

Сортировка глубины по диагонали
 
Облазил весь форум и интернет, но не нашел как отсортировать объекты по координатам x и y одновременно т.е. по диагонали. Вот как я это делаю по оси y:
Код AS3:

        public function sortChildrenByY(container:MovieClip):void
                {
                        var i:int;
                        i = container.numChildren;
                        while (i--)
                        {
                                objArr[i] = container.getChildAt(i);
                        }
                        objArr.sortOn("y", Array.NUMERIC);
                        i = container.numChildren;
                        while (i--)
                        {
                                if (objArr[i] != container.getChildAt(i))
                                {
                                        container.setChildIndex(objArr[i], i);
                                }
                        }
                }

Что тут можно добавить чтобы получился желаемый результат? (применение сортировка объектов изометрической сетки по вертикали)

in4core 25.11.2012 19:16

Код AS3:

for(var i:int = 0; i < container.numChildren; i++)
{
    var mc:DisplayObject = container.getChildAt(i) as DisplayObject;
    arr.push([mc.x,mc.y]);
}

И сортируешь уже по массивам. или по объектам кому как удобно, но лучше вообще вектором делать, там возможностей больше

silin 25.11.2012 19:40

как вариант
Код AS3:

public function sortChildrenByXY(container:DisplayObjectContainer):void
{
        var i:int;
        var propArr:Array = [];
        var objArr:Array = [];
        for (i = 0; i < container.numChildren; i++)
        {
                var obj:DisplayObject = container.getChildAt(i);
                propArr.push(obj.x * obj.x + obj.y * obj.y);
                objArr.push(obj);
        }
        var indxArr:Array =  propArr.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
        for (i = 0; i < indxArr.length; i++)
        {
                container.addChild(objArr[indxArr[i]]);
        }
}


Tetraeon 25.11.2012 20:07

Спасибо большое !
silin ваш вариант подошел.


Часовой пояс GMT +4, время: 11:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.