関連するすべてのムービー クリップを Y 位置に基づいて昇順に描画することで被写界深度をシミュレートしようとする Flash CS5/AS 3.0 を使用したゲームを作成しています。したがって、Y 位置が 10 の MovieClip は、Y 位置が 20 の MovieClip よりも低いインデックスを持つ必要があるため、2 番目のものは最初のものの上に描画されます。
これをテストするためだけに、簡単で汚い関数を書きました。トレース中、ステージの最上部に近づくとトラックのインデックスが 0 になることに気付きましたが、上に行きすぎると完全にステージから消えてしまいます。次に、トレースが次のエラーの生成を開始します。
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]);
}
}