Задайте имя динамической переменной в ActionScript 3.0
Мне нужно установить имя пользовательской переменной для каждой итерации. Почему это невозможно?
for (var i:uint = 0; i < 50; i++)
{
var ['name' +i] = new Sprite();
}
*//1840: Syntax error: expecting identifier before left bracket*
3 ответов
вы хотите использовать хэш-карту для этого.
var map:Object = {};
for (var i:uint = 0; i < 50; i++)
{
map['name' +i] = new Sprite();
}
в противном случае вы путаете компилятор. Динамические имена локальных переменных не допускаются.
есть своего рода способ обойти это, в зависимости от того, что вы делаете. Если все эти клипы добавлены в stage, вы можете использовать метод 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 для чего-либо, что не добавлено в список отображения где-либо.
надеюсь, что это поможет!
хотя не рекомендуется, поскольку динамические классы медленнее, чем запечатанные классы, вы можете сделать класс динамическим, а затем использовать это["varname"] для установки переменной. Вам нужно указать класс как динамический даже при расширении динамического класса, такого как Movieclip (подклассы не наследуют это).
dynamic public class MyClass{
....
....
....
for (var i:uint = 0; i < 50; i++)
{
this['name' +i] = new Sprite();
}