2009-08-05 4 views
0

배열에 여러 객체를 생성합니다. 나는as3 명시 적으로 정의되지 않은 배열 구성원을 참조하는 멤버

for(i:int; i < number; i++){ 
    ball= new Ball; 
    balls.push(ball); 
    } 

처럼 반복적으로이 일을하는 데있어 다음 나중에 나는 [i]는 공에 대한 참조를 만들 수 있습니다. 그러나 for 루프를 사용하지 않고 마우스 클릭만으로 객체를 생성하므로 다른 코드가 "공"에 대한 참조를 만들 수 있습니다. 즉, "공"에 대한 참조가됩니다. 즉, 만들어진. 각 개체를 임의로 '이름 짓기'위한 합리적인 방법이 있습니까? 나중에 "각자 나름대로 자신의 일을하고 다른 모든 사람은 무시하십시오"라고 말할 수 있습니까? 몇 가지 해결책이 있습니다

답변

0

,

당신이 볼에 대한 참조가있는 경우, 당신이 사용할 수있는 당신이 이야기 할 수 있도록 배열에 당신의 위치를 ​​줄 것이다

myArray.indexOf(myBall) 

.

당신은 또한이 같은 이름 값을 저장할 수 있습니다 :

myArray["name" + uniqueIdentifier] = myBall; 

당신의 푸시 문을 대체 할 것이다.

또는 당신 수 같은 그들 모두를 통해 단지 루프 : 당신에게 몇 가지 아이디어를 제공

for(var i:int = 0; i < myArray.length; i++) 
{ 
    ball = myArray[i]; 
    //perhaps you stored a value on ball to distinguish when it was created 
    if(ball.wasCreatedByMouseClick) // do something 
} 

희망.

+0

이것은 내가 염두에 두었던 것입니다. 고맙습니다! –

0

나는 당신의 코드가 무엇을하고 있는지 알지 못한다. 그러나 당신이 기술 한 것에 따라 나는 문자열 키로 당신의 객체를 저장하기 위해 사전을 사용할 것이다.

사전 클래스는 동적 속성 (키)과 해당 값 (개체)을 설정할 수있는 개체로 동작합니다. 키는 무엇이든 될 수 있기 때문에 객체와 다릅니다 (문자열, 객체, 배열 등). 좋은 일이 약한 사전 참조를 설정하는 시나리오에 따라

var d:Dictionary = new Dictionary (true); 
d["myBall"] = new Ball(); 

function getBallByKey(key:String):Ball 
{ 
return d[key]; 
} 

:

은 예입니다. 이것은 메모리 누수를 피하기위한 것입니다. 실제로 객체를 다른 참조로 삼지 않고 사전 자체가 그 객체를 가리키고 있습니다.

+0

안녕하세요, Pigiuz, 사전 및 약한 키에 대한 일반적인 오해가 있습니다. 당신이 언급했듯이, 키는 약하지만 값은 없습니다. Ball 객체를 사전에 값으로 저장하면 예제처럼 자동 정리가되지 않습니다. 약한 키는 Object를 키로 사용할 때만 적용됩니다. –

+0

죄송합니다, 나는 그 행동을 알았고 그 ... 언급하지 않았다 ... 내 잘못 : 그러나, 좋은 연습은 항상 열쇠를 삭제할 때 개체를 제거하는 것입니다. – pigiuz

+0

네, 분명히 동의합니다. 항상 자신을 정리하는 것이 좋습니다. –

관련 문제