Как мне получить доступ к большему количеству объектов в AS3 без написания строки для каждого из них? - PullRequest
0 голосов
/ 04 февраля 2019

Допустим, у меня есть 5 объектов во флэш-памяти, и я хочу изменить несколько их свойств;Их имена - вещь1, вещь2 и так далее.Когда у меня есть 3 или 4 мувиклипа, это легко, потому что я просто напишу строку для каждого из них, но иногда это касается нескольких сотен объектов.

thing1.alpha = 0.5;
thing2.alpha = 0.5;
thing3.alpha = 0.5;
thing4.alpha = 0.5;

И вместо этого я хочучто-то вроде этого:

var nr: int;
for (nr = 1; nr <= 4; nr++){
    MovieClip(String("thing" + String(nr))).alpha = 0.5;
}

Я знаю, что это не сработает, но есть ли способ, которым я могу заменить эту "Строку" чем-то, что будет делать?

(я не хочучтобы сделать это добавление Чайлдс)

1 Ответ

0 голосов
/ 04 февраля 2019

Массив s и циклы - это ответ.

Вы можете сначала перечислить все объекты и получить к ним доступ через Массив :

var aList:Array = [thing1, thing2, thing3, thing4];
var aThing:DisplayObject;

for each (aThing in aList)
{
    aThing.alpha = 0.5;
}

Вы можете получить доступ к объектам в контейнере, если знаете, как создать их имена:

for (var i:int = 1; i <= 4; i++)
{
    var aName:String = "thing" + i;
    var aThing:DisplayObject = getChildByName(aName);

    aThing.alpha = 0.5;
}

UDP: Обычно я не поощряю это из-за определенных последствий (и я все еще думаю,что придерживаться списка вперед или использования getChildByName (...) - это более надежные подходы в этом же порядке), но в любом случае.Вы также можете обращаться к вложенным объектам через квадратные скобки, но это работает только на:

  • изначально разработанных объектах с Файл> Параметры публикации> Настройки AS3> Автоматически объявить инстансы сцены . ON (по умолчанию это ON , но в любом случае это полезно знать);
  • объекты, добавленные во время выполнения, которые вы явно назначили в качестве членовданный контейнер с теми же именами, что и собственные имена экземпляров объектов.

Кроме того, я действительно советую прочитать мой ответ здесь , он подробно освещает тему адресации.

for (var i:int = 1; i <= 4; i++)
{
    var aName:String = "thing" + i;
    var aThing:MovieClip = this[aName];

    aThing.alpha = 0.5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...