我正在用Flash CS5/AS 3.0编写游戏,试图通过基于Y位置的升序来绘制所有相关的电影剪辑来模拟景深,也就是说舞台上较低的东西与舞台上的东西重叠。因此,与Y位置为20的MovieClip相比,Y位置为10的MovieClip因此需要较低的索引,因此第二个位于第一个位置上。基于Y位置更改动画片段的子索引?
我写了一个快速而脏的函数来测试这个。在追踪过程中,我注意到当我靠近舞台顶部时,卡车的索引达到0,但如果我走得太远,它将完全从舞台上消失。跟踪然后开始产生这样的错误:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/getChildIndex()
at EICT::Game/ReorganizeDisplayIndexes()
at 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]);
}
}
谢谢,我已经绕过它,事实证明,这一点的代码甚至不负责让卡车消失在第一位。但我仍然会使用这种方法。 – 2012-03-01 14:11:28