Порядок экземпляров в 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
член должен быть членом класса и добавлять / удалять элементы к нему всякий раз, когда вы добавляете / удаляете элементы на / со сцены, чтобы вам не приходилось заполнять весь массив при каждом вызове этой функции.