2009-10-11 10 views
6

Potrzebuję ustawić niestandardową nazwę zmiennej dla każdej iteracji. Dlaczego nie jest to możliwe?Ustaw nazwę zmiennej dynamicznej W 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

dlaczego nie używasz tablicy? – Amarghosh

Odpowiedz

9

Chcesz użyć mapy mieszania, aby to zrobić.

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

W przeciwnym razie mylisz kompilator. Nazwy dynamiczne dla zmiennych lokalnych są niedozwolone.

+0

Tego właśnie szukałem, ale to nie działa w moim scenariuszu. Będę musiał użyć tablicy. Jest to bardzo słabo udokumentowane na temat żyjących osobników, czy może znasz jakieś przyzwoite opracowanie? –

+0

Możesz również użyć tablicy. Lub możesz przeglądać mapę jak tablicę. (dla (var n: String na mapie) {}). Być może potrafisz wyjaśnić, dlaczego musisz to zrobić i możemy zaproponować alternatywne rozwiązania. – Glenn

3

Jest na to sposób, w zależności od tego, co robisz. Jeśli wszystkie te klipy zostaną dodane do sceny, możesz użyć metody getChildByName, aby uzyskać do nich dostęp. Twoja konfiguracja będzie wyglądać mniej więcej tak:

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] 

Odbywa się to poprzez odpytywanie API wyświetlacza, choć, więc nie można użyć getChildByName na wszystko, co nie jest dodawany do listy wyświetlania gdzieś.

Nadzieję, że pomaga!

+0

To na pewno sposób, aby przejść, ale kod staje się bałagan z nim. –

0

Chociaż nie jest zalecane, ponieważ klasy dynamiczne są wolniejsze niż klas zapieczętowane, można z pewnością uczynić klasę dynamiczną, a następnie użyć tej ["nazwa_zmiennej"], aby ustawić zmienną. Trzeba określić klasę jako dynamiczną, nawet podczas rozszerzania klasy dynamicznej, takiej jak Movieclip (podklasy tego nie dziedziczą).

dynamic public class MyClass{ 
.... 
.... 
.... 
for (var i:uint = 0; i < 50; i++) 
{ 
    this['name' +i] = new Sprite(); 
} 
Powiązane problemy