내 프로그램에서 심도있는 정렬로 최근에 문제가 발생했습니다. 기본적으로 모든 프레임마다 정렬됩니다. 정렬은 실제로 scaleX와 scaleY 인 "깊이"를보아야합니다 (항상 동일하므로 scaleX를 보았습니다). 따라서 더 큰 scaleX를 가진 요소는 더 낮은 값을 가진 요소보다 위에 있어야합니다. y 값을 입력 한 다음 정렬하십시오. 한 단어로 : scaleX를 정렬 한 다음 Y를 정렬합니다. 어떻게 이러한 정렬 함수를 작성할 수 있습니까?엑스트라를 사용한 AS3 깊이 정렬
편집 : 두 개의 표시 객체가 동일한 "깊이"(scaleX)에 있지 않으면이 함수를 작성한 후 서로 교환합니다.
public static function sortEverythingInContainer(container:DisplayObjectContainer, fromIndex:int = 1) {
var i : int = 0;
var j : int = 0;
var n : int = container.numChildren;
var child1:DisplayObject;
var child2:DisplayObject;
for (i = fromIndex; i < n; ++i){
j = i;
child1 = container.getChildAt(j);
child2 = container.getChildAt(j - 1);
while (j > fromIndex-1 && (child1.scaleX < child2.scaleX?false:child1.y < child2.y)) {
container.swapChildren(child1, child2);
--j;
if (j <= fromIndex-1)
break;
child1 = container.getChildAt(j);
child2 = container.getChildAt(j - 1);
}
}
}
솔루션 :
그때 확장, 사이클 Y에 따라 첫 번째 종류의 2를 만들어 두 번 정렬했다. 내가 바로 당신을 이해한다면,이 같은 것을 사용할 수 있습니다 여기에
내가 정렬 표시 목록을 사용하고, 그래서이 없습니다 모든 배열. 그거 알아? – Zhafur
비슷한 경우에 @Zhafur 참조로 배열을 만들고이 방법으로 정렬했습니다. – Cherniv
메서드를 확인하고 속성의 배열을 사용하려했지만 디스플레이 개체가 서로 겹치기 때문에 상황이 더 나쁩니다. – Zhafur