2014-04-23 5 views
0

Flash Pro cc. (ActionScript3)를 사용하여 게임을 만들고 있습니다하지만 루프를 통해 MovieClip 변수가 동적으로 선언 된 aTile에 어떤 일이 발생하는지 궁금합니다. 그리고 각 aTile은 2 EventListener를 가져옵니다. 위한동적으로 선언 된 변수를 사용하지 않을 때 어떤 일이 발생합니까?

(VAR I :; I < pVector.length; 번호 = 0 난 ++) {

var aTile:ATile=new ATile(); 

aTile.x=pVector[i].x; 

aTile.y=pVector[i].y; 

aTile.gotoAndStop(Math.ceil(Math.random()*Color)); 

nVector.push(aTile); 



Spr.addChild(aTile); 


aTile.addEventListener(MouseEvent.CLICK,Clicked,false,0,true); 

aTile.addEventListener(Event.COMPLETE, stop,false,0,true); 

}

//는 현재 기능은 여기서 끝난다. 지금 aTile은 어떻게 될까요 ?? 쓰레기 수거 할 것인가? 그런데이 코드는 플레이어가 새로운 레벨의 게임을 시작할 때마다 실행됩니다. 그리고 다른 함수에서는 aTile 변수를 사용하지 않습니다. 나는 nVector 변수 만 사용합니다. 루프에서 동적 변수를 선언하면 여러 변수가 만들어 짐을 의미합니까? 예를 들어 코드 조각을 5 번 반복하면 5 개의 aTile 변수가 만들어 집니까? 또는 var aTile을 선언 할 때마다 : ATile = new ATile(); 다시 말하지만, 그것은 'old'aTile을 'new'aTile로 대체 할 수 있으며 따라서 루프 뒤에 오직 하나의 aTile 만 존재합니다 ????

답변

1

ActionScript는 JavaScript의 파생물입니다. 두 언어 모두에서 모든 변수 선언은 포함 함수의 맨 위로 들어 올려지며 선언 된 블록 범위에 관계없이 함수 전체에서 액세스 할 수 있습니다.

개체에 대한 모든 참조가 더 이상 필요 없으면 메모리가 회수됩니다. 프로그램에 액세스 할 수 있습니다. nVector와 Sprite에 aTile을 추가하기 때문에 함수가 반환되고 nVector가 범위를 벗어나서 Spr이 범위를 벗어나 스테이지에서 제거 된 후에 만 ​​다시 요구됩니다.

+0

nVector가 '범위를 벗어남'은 nVector = null을 의미합니까? 나는 nVector와 Spr을 무효화하여 각 레벨의 끝에서 (게임의) 다른 기능으로 그렇게합니다. 둘이 무효화 된 후 쓰레기 수거를할까요? – SpiderWeb

+0

또한 Spr.removechild (aTile)에서 Spr을 무효화했습니다. – SpiderWeb

+0

예, 아이디어는 더 이상 액세스 할 수 없을 때까지 개체가 가비지 수집되지 않는다는 것입니다. nVector를 null로 설정하면 nVector는 다른 방법이없는 한 가비지 수집을 할 수 있습니다. nVector 내의 모든 객체는 다른 방법으로 접근 할 수없는 한 가비지 수집 대상이됩니다. – Tmdean