Порядок экземпляров в 3D Flash

Я делаю куб из 9 кубов во Flash As3. Однако я не могу повернуть его должным образом из-за порядка полного добавления индексов, а затем на сцену. Сначала я создаю куб из 6 квадратов, затем стену из 9 кубов, а в конце куб из 3 стен. Все в порядке, однако, когда я поворачиваю его влево, порядок кубов переворачивается, и это разрушает всю композицию. Я знаю, что могу динамически изменять индекс, основанный на ротации, но это было бы слишком сложным делом. Любые идеи, как я мог бы сделать это лучше?

Вот актуальная модель: http://test.mrowa.topdivision.pl/kostka/3DTest.html

1 ответ

Решение

Если вы используете список отображения Flash, вам придется отсортировать спрайты по их z.

Вот код, который бы сортировал детей DisplayObjectContainer основанный на их позиции z, вызывайте это всякий раз, когда какой-либо объект меняет свою позицию.

public function sortChildren(container:DisplayObjectContainer):void
{
    var objects:Vector.<DisplayObject> = new Vector.<DisplayObject>;

    for (var i:int = 0; i < container.numChildren; i++) 
    {
        objects.push(container.getChildAt(i));
    }

    objects.sort(sortCompare);

    var index:int = 0;
    for (var j:int = 0; j < objects.length; j++) 
    {
            index = container.getChildIndex(objects[j]);
            if (index != j)
                container.setChildIndex(objects[j], j);         
    }
}

private function sortCompare(a:DisplayObject, b:DisplayObject):int
{
    return (a.z - b.z);
}

Вы можете переместить objects член должен быть членом класса и добавлять / удалять элементы к нему всякий раз, когда вы добавляете / удаляете элементы на / со сцены, чтобы вам не приходилось заполнять весь массив при каждом вызове этой функции.

Другие вопросы по тегам