Я пишу игру с Flash CS5 / AS 3.0, которая пытается смоделировать глубину резкости, рисуя все соответствующие мувиклипы на основе их позиции Y в порядке возрастания, то есть вещи ниже на сцене перекрывают вещи выше на сцене,Поэтому MovieClip с позицией Y, равной 10, должен иметь более низкий индекс по сравнению с MovieClip с позицией Y, равной 20, поэтому второй будет нарисован поверх первого.
Я написал быстрый игрязная функция просто чтобы проверить это.Во время трассировки я заметил, что индекс грузовика достигает 0, когда я подхожу к вершине сцены, но если я подойду слишком далеко, он полностью исчезнет со сцены.Затем трассировка начинает генерировать эту ошибку:
ArgumentError: Ошибка # 2025: Указанный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне.на flash.display :: DisplayObjectContainer / getChildIndex ()на EICT :: Game / ReorganizeDisplayIndexes ()at EICT :: Game / loop ()
theTruck - это мувиклип контролируемого игроком транспортного средства. Враги, конусы, скалы - это массивы, содержащие MovieClips
Ни у одного из них нет прослушивателей событий.
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]);
}
}