y 위치에 따라 MovieClips의 자식 색인을 변경합니까?
-
14-11-2019 - |
문제
Flash CS5 / AS 3.0을 사용하여 y를 눌러서 y 위치를 기반으로 모든 관련 무비 클립을 기반으로 모든 관련 무비 클립을 시뮬레이트하려고 시도합니다. ...에 따라서 10의 Y 위치가있는 MovieClip은 20의 Y 위치가있는 MovieClip에 비해 낮은 인덱스를 가질 필요가 있으므로 두 번째는 첫 번째 맨 위에 그려집니다.
나는 이것을 테스트하기 위해 빠르고 더러운 기능을 썼다. 추적 중에 트럭의 색인이 무대의 꼭대기 근처에서 가면 0이 엉터리가 있지만 너무 멀리 가면 무대에서 완전히 사라집니다. 추적 다음이 오류를 생성하는 시작 :
argumentError : 오류 # 2025 : 제공된 DisplayObject는 발신자의 자식이어야합니다.
flash.display :: DisplayObjectContainer / getChildIndex ()
Ect :: 게임 / ReorganizedIsplayIndexes ()
ECT :: 게임 / 루프 ()tetruck는 플레이어 제어 된 차량의 MovieClip입니다. 적, 콘, 암석은 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]); } }
해결책
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!