2009-10-11 12 views
6

모든 반복마다 맞춤 변수 이름을 설정해야합니다. 왜 이것이 가능하지 않습니까?동적 변수 이름 설정 ActionScript 3.0에서

for (var i:uint = 0; i < 50; i++) 
{ 
    var ['name' +i] = new Sprite(); 
} 
*//1840: Syntax error: expecting identifier before left bracket* 
+2

왜 배열을 사용하지 않습니까? – Amarghosh

답변

9

이렇게하려면 해시 맵을 사용하고 싶습니다.

var map:Object = {}; 
for (var i:uint = 0; i < 50; i++) 
{ 
    map['name' +i] = new Sprite(); 
} 

그렇지 않으면 컴파일러가 혼란 스럽습니다. 지역 변수의 동적 이름은 허용되지 않습니다.

+0

이것은 내가 찾고 있던 것이지만 내 시나리오에서는 작동하지 않습니다. 나는 배열을 사용해야 할 것이다. livedocs에는 매우 잘 설명되어 있지 않습니다. 알맞은 정교함을 알고 있습니까? –

+0

배열을 사용할 수도 있습니다. 또는 배열과 같이 맵을 반복 할 수 있습니다. (for (var n : String in map) {}). 어쩌면 당신은 당신이 이것을 해야하는 이유에 대해 더 자세히 설명 할 수 있습니다. 우리는 대안을 제안 할 수 있습니다. – Glenn

3

당신이하고있는 일에 따라이 문제를 해결할 수있는 방법이 있습니다. 이러한 클립이 모두 스테이지에 추가되면 getChildByName 메소드를 사용하여 해당 클립에 액세스 할 수 있습니다. 귀하의 설정은 다음과 같이 보일 것입니다 :

var clips:Array = []; 

for (var i:int = 0; i < 100; i++) { 
    clips[i] = new MovieClip(); 
    clips[i].name = "clip" + i; 
    addChild(clips[i]); 
} 

trace (getChildByName("clip2")); // traces [object MovieClip] 

이는하지만, 디스플레이 API를 쿼리하여 수행됩니다, 그래서 당신은 어딘가에 표시 목록에 추가 아니에요 아무것도 사용해, getChildByName을 사용할 수 없습니다.

희망 하시겠습니까?

+0

확실한 방법이지만 코드가 더러워집니다. –

0

동적 클래스는 봉인 된 클래스보다 느리기 때문에 권장하지는 않지만 클래스를 동적으로 만든 다음이 [ "varname"]을 사용하여 변수를 설정할 수 있습니다. Movieclip과 같은 동적 클래스를 확장 할 때도 클래스를 동적으로 지정해야합니다 (하위 클래스는 이것을 상속받지 않습니다).

dynamic public class MyClass{ 
.... 
.... 
.... 
for (var i:uint = 0; i < 50; i++) 
{ 
    this['name' +i] = new Sprite(); 
} 
관련 문제