2013-08-14 2 views
0

컨테이너 배열에 저장 한 컨테이너 내에서 컨테이너를 가져 오려고합니다. 혼란 스럽네요. 코드는 다음과 같습니다.컨테이너 배열을 반복합니다.

먼저 사람과 동물을 위해 BMP와 레이블을 저장할 개별 컨테이너를 만듭니다. (BMP 및 관련 레이블을 개별적으로 제어하기 위해 NPC의 각 인스턴스에 대해 새 컨테이너를 만듭니다.).

peopleContainer.addChild(peopleBMP, peopleLabel); 
animalContainer.addChild(animalBMP, animalLabel); 
animalContainer2.addChild(animalBMP, animalLabel); 

그때 나는 그들에게 이름과 ID를 할당합니다

peopleContainer.name = "peopleContainer1"; 
peopleContainer.id = 0; 

animalContainer.name = "animalContainer1"; 
animalContainer.id = 1; 

animalContainer2.name = "animalContainer2"; 
animalContainer2.id = 2; 
그때 이러한 개별 용기 저장 용기 만들

: 배열에

ContainerOfPeople = new createjs.Container(); 
ContainerOfPeople.name = "Container Of People"; 
ContainerOfPeople.id = 0; 
ContainerOfPeople.addChild(peopleContainer); 

ContainerOfAnimals = new createjs.Container(); 
ContainerOfAnimals.name = "Container Of Animals"; 
ContainerOfAnimals.id = 1; 
ContainerOfAnimals.addChild(animalContainer, animalContainer2); 

그때 그 큰 컨테이너를 추가하십시오

이제 대형 컨테이너의 배열을 반복하고 대형 컨테이너 내의 컨테이너 ID를 얻으려고합니다. 그런 식으로 플레이어의 가장 가까운 거리를 확인할 수 있습니다.

function checkDistance2() { 
    //loop through Containers Array [ContainerOfAnimals, ContainerOfPeople]... 
    for (var index = 0; index < NPC_Array.length; index++) { 
     console.log(NPC_Array[index].children[0].name);   
    }    
} 

출력 제공 :

peopleContainer1 
animalContainer2 

그것은 작동하는 것 같군,하지만 그것은 ContainerOfAnimals 내 첫 animalContainer (이름 animalContainer1)를 스킵합니다. 왜 그런가요?

감사합니다.

답변

1

NPC_Array[index].children에 배열을 반복하지 않습니다. 이것은 수정이 :

function checkDistance2() { 
    for (var index = 0; index < NPC_Array.length; index++) { 
     for (var j = 0; j < NPC_Array[index].children.length; j++) { 
      console.log(NPC_Array[index].children[j].name); 
     } 
    }    
} 

http://jsfiddle.net/mattball/6HGY9

+0

왜? animalContainer의 이름은'animalContainer1'이지만, 실제 container 변수의 이름은 여전히 ​​animalContainer입니다 ... name 속성을 변경할 때 변수 이름 참조가 어떻게 든 변경되지 않는다면? – Growler

+0

사실, 저의 실수입니다. 내 편집을 참조하십시오. –

+0

animalContainer1이 추가되지 않은 이유를 알아 냈습니다 ... 원래는'animalContainer2 = animalContainer;를 수행하여 animalContainer1의 새 사본을 animalContainer2에 만들 수 있다고 생각했습니다. 그냥 'animalContainer2'가 필요하다는 것을 깨달았습니다. 복제본을 만들려면 – Growler