2009-11-04 2 views
1

누구나 actionscript 3 프로젝트에서 디스플레이리스트를 관리하는 좋은 방법에 대한 제안이 있습니까? 지금은 응용 프로그램을 작성하고 표시해야하는 모든 모듈을 추적하고 재정렬하면 다루기 힘들어집니다. swfs를로드하고 swf, 이미지 및 비디오에도로드되는 클래스를 인스턴스화했습니다. 모든 것을 스테이지로 참조해야합니까? 디스플레이 트리를 어떻게 추적해야합니까? 특정 모듈을 항상 트리의 맨 위에 배치하려면 어떻게합니까?actionscript 3 applications에서 디스플레이리스트 관리

답변

1

컨테이너 DisplayObjects를 사용하여 각 DisplayObject가 직접적인 하위 항목을 관리하도록합니다 (부모가 자녀에게 수행 할 작업을 지시합니다). 일반적으로 디스플레이 목록을 자체 컨테이너에있을 수있는 자연스러운 "레이어"로 나눌 수 있습니다.

이 방법을 사용하면 주 컨테이너가 깊이를 변경할 필요가 없으므로 스테이지에 추가 된 마지막 컨테이너가 맨 위에 표시됩니다.

DisplayObject를 표시 목록의 맨 위에 표시하려면 addChild가 이미 추가되어 있어도됩니다. 목록의 맨 위에 추가됩니다.

+1

이것은 좋은 출발, 감사합니다 ;-) – martin

0

언급 된 용기를 사용하는 것이 가장 좋은 방법입니다. 컨테이너는 당신의 친구입니다.

addChild()를 사용하여 목록의 맨 위로 이동하지만 코드 전체에서 50,000 번 수행해야하는 경우에는 소모적 일 수 있습니다. 따라서 여러 항목을 가져야하는 경우에는 유지해야합니다. 상관없이 위에.

내 문서 클래스에 "우선 순위가있는 깊이 스택"배열을 만듭니다. 무엇보다 언제든지 "위에"원하는 모든 것을 추가합니다. 주요 표시 객체를 전환하는 대신 배열을 반복하고 배열의 모든 내용을 다시 추가하는 "RunDepthStack"이라는 메서드를 사용합니다.

당신은 그것에 대해 매우 메타 얻을과와 관계없이 컨테이너의 우선 순위의 DisplayObject를 관리 할 수있게된다

object.parent.addChild(object); 

를 호출하여 무대도 필요없는 배열에 객체를 추가 할 수 있습니다 단일 슈퍼 메서드 ...

이제 매우 복잡한 UI가있는 경우보다 세분화해야하지만 그게 지금 당신의 문제라고 의심하지 않습니다.

+0

저는이 아이디어가 마음에 들지 않습니까? 감사합니다 ;-) – martin

+0

배우기! 아무도 나에게 가르쳐주지 않았어, 갱스터. –

+0

나는 부모님에게 무엇을해야한다고 말하고있는 아이들의 생각을 정말로 좋아하지 않는다! –

0

응용 프로그램이 크면 사용자가 응용 프로그램과 상호 작용할 때 addChild/removeChild가됩니다.

그러나 매우 작 으면 단순한 가시적 인 true/false로 잘 처리됩니다.

첫 번째 경우 인 것 같습니다.

네, 네비게이션을 채우는 데 사용되는 사이트 맵으로 클래스/객체를 사용하고, 모듈 참조를 추적하고, 사용자가있는 위치와 역행렬에 사용할 수 있도록합니다.

setChildIndex(example, otherindex) //pushes the other thing forward 
: 그 일 뒤에

var otherindex = getChildIndex(theotherthing); 

: 깊이 교환에 관해서는

, 당신이 시각적 깊이 얘기 가정 사이의 이러한 :)

setChildIndex(example,0); // send to back 

setChildIndex(example,numChildren - 1); // bring to front 

스왑을 구현

앞면 :

setChildIndex(example, otherindex + 1); 

HTH.