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