Изменение детского индекса мобильных веществ на основе их позиции Y?
-
14-11-2019 - |
Вопрос
Я пишу игру с помощью 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!