Изменение детского индекса мобильных веществ на основе их позиции Y?

StackOverflow https://stackoverflow.com/questions/9511876

Вопрос

Я пишу игру с помощью Flash CS5 / как 3.0, которая пытается имитировать глубину поля, рисуя все соответствующие клипы фильмов на основе их позиции y в порядке возрастания, то есть все ниже на сцене на сцене на сцене Отказ Таким образом, мовиеедицил с положением y y 10, следовательно, необходимо иметь более низкий индекс по сравнению с перемещением движения с положением y y 20, поэтому второй вытягивается сверху первого.

Я написал быструю и грязную функцию, чтобы проверить это. Во время трассировки я заметил, что индекс грузовика ударяется 0, когда я ухожу на вершину сцены, но если я пойду слишком далеко, он полностью исчезнет с сцены. Затем трассировка, затем начинает генерировать эту ошибку:

ArgumentError: Ошибка # 2025: Поставляемый DisplayObject должен быть ребенком абонента.
На flash.display :: DisplayObjectContainer / getChildindex ()

В EICT :: Game / ReорганизенПлайндекс ()

В EICT :: Game / Loop ()

Thetreuck - это движительство автомобиля контролируемого игрока Враги, конусы, камни - это все массивы, которые содержат домовелики

У них нет слушателей событий.

    private function ReorganizeDisplayIndexes(): void
    {
        var drawableObjects:Array = new Array();
        drawableObjects.push(theTruck);
        drawableObjects = drawableObjects.concat(Enemies, Rocks, Bushes);
        drawableObjects.sortOn("y", Array.DESCENDING | Array.NUMERIC);
        drawableObjects.reverse();
        trace(collisionLayer.getChildIndex(theTruck));
        for (var a:int = collisionLayer.numChildren - 1; a >= 0; a--)
        {
            collisionLayer.removeChildAt(a);
        }
        for (var i:int = 0; i < drawableObjects.length; i++)
        {
            collisionLayer.addChild(drawableObjects[i]);
        }
    }
.

Это было полезно?

Решение

Hint: You don't need to remove the child first. When you use addChild() on an object, it is automatically re-added to the next highest depth.

That said, you'll just need to do something like this:

drawableObjects.sortOn("y");

for each(var i:DisplayObject in drawableObjects)
{
    if(i.parent)
        i.parent.addChild(i);
}

Другие советы

Use setChildIndex instead of removing and re-adding:

for (var a:int = collisionLayer.numChildren - 1; i >= 0; i--)
{
    collisionLayer.setChildIndex(drawableObjects[i], i);
}

Also, it's a bit wasteful to first order the sort in descending and then reversing the array. Sort it ascending to begin with!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top