2013-08-29 4 views
1

내가 만든이 코드가 붙어 있습니다. 그것이하는 일은 클래스의 모든 자식을 반복하고 나서 priority 속성이 1로 설정되어 있는지 확인하는 것입니다. 우선 순위가 1이면 childList의 끝에 추가됩니다. 내가 가지고있는 문제는 우선 순위가 1 인 객체를 찾으면 다음 객체를 건너 뜁니다. 이는 객체를 끝까지 이동하기 때문에 전체 배열이 한 위치를 왼쪽으로 이동하므로 이미 체크 한 것으로 생각하기 때문에 다음 객체를 건너 뜁니다.건너 뛰는 동안 자식을 반복하십시오.

for (var j:int = 0; j < this.numChildren; j++) 
    { 
     var tempObject:Object = this.getChildAt(j); 
     if (tempObject._priority == 1) 
     { 
      var indexofnew:Number = this.getChildIndex(tempObject as DisplayObject); 
      this.setChildIndex(this.getChildAt(indexofnew),this.numChildren-1); 
     } 

이 문제를 해결하는 방법에 대한 전체적인 벽이 있습니다. 아무도 아이디어가 있니?

+0

특정 DisplayObject의 표시 목록에있는 모든 하위를 반복한다는 의미입니다. 맞습니까? – prototypical

+0

맞습니다. – Banzboy

답변

1

문제는 목록의 마지막에 표시 목록에 지정된 아이의 위치를 ​​이동할 때, 그 아래에있는 다른 아이들의 인덱스가 감소한다는 것입니다.

자식 인덱스에 대한 유일한 변경 사항은 이미 처리 된 DisplayObjects에 대한 변경 사항이므로 루프를 통해 반복하는 것이 가장 좋습니다.

for (var j:int = numChildren-1; J >= 0; j--) 
{ 
     var tempObject:Object = this.getChildAt(j); 
     if (tempObject._priority == 1) 
     { 
      var indexofnew:Number = this.getChildIndex(tempObject as DisplayObject); 
      this.setChildIndex(this.getChildAt(indexofnew),this.numChildren-1); 
     } 
} 
+0

Chad의 솔루션에 대해 언급 한 것처럼이 코드도 작동하지만 무한 루프가 발생합니다. – Banzboy

+0

이 버전을 사용해 보셨습니까? 나는 나의 대답을 업데이트했다. 이것은 무한 루프가되어서는 안됩니다. 역 루프입니다. – prototypical

+0

와우 감사합니다! 그게 전부 야. – Banzboy

1

대신 while 루프를 사용해보십시오. 이렇게하면 루프가 일치하지 않는 경우에만 증가합니다. 경기에서 동일하게 유지됩니다.

var j = 0; 
while(j < this.numChildren) { 
    var tempObject:Object = this.getChildAt(j); 
    if(tempObject._priority == 1) { 
     var indexofnew:Number = this.getChildIndex(tempObject as DisplayObject); 
     trace(indexofnew+"n"); 
     this.setChildIndex(this.getChildAt(indexofnew),this.numChildren-1); 
    } else { 
     j++; 
    } 
} 
+0

코드가 작동하지만 불행히도 결국 무한 루프가됩니다. 마지막 몇 개체는 일치하므로 iterating을 유지합니다. – Banzboy

+0

이 답변은 저의 초기 생각과 유사 합니다만, 마지막 자식의'_priority == 1 '이면'j'를 반복하지 않으므로'j'는 항상' 그 경우에는 numChildren을 사용하십시오. – prototypical

관련 문제