문제

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!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top