Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   перебор экземпляров класса циклом (http://www.flasher.ru/forum/showthread.php?t=211940)

Dmitriy154 11.12.2015 15:01

перебор экземпляров класса циклом
 
Подскажите, у меня на сцене N-экземпляров класса Ball: ball1, ball2, ..., ballN - как мне циклом присвоить им определенное свойство, например mouseEnabled?

Godwarlock 11.12.2015 15:59

Код AS3:

var arr:Array = [];

Добавляешь все классы в этот массив методом push. Типо
Код AS3:

arr.push(Ball);

Потом пробегаешь по циклу
Код AS3:

for(var i:int = 0; i<arr.length; i++)
{
arr[i].mouseEnabled = true;
}


undefined 11.12.2015 15:59

Код AS3:

for(var i:uint=1;i<n-1;i++) {
this["ball"+i].mouseEnabled=false;
}

n- число экземпляров

Dmitriy154 11.12.2015 17:00

Godwarlock помог, спасибо.
undefined,
Код AS3:

this["ball"+i].mouseEnabled=false;

- я не в конструкторе делаю, а я уже их разместил на сцене

caseyryan 12.12.2015 14:20

Цитата:

- я не в конструкторе делаю, а я уже их разместил на сцене
И? Какая разница-то? Речи о констукторе и не было

Dmitriy154 13.12.2015 23:31

this как бы используется только в методах (и конструкторе), ну да ладно, у меня родился второй вопрос.
Работаю в Flash IDE, в определенной кадре на сцену добавляются шары с именами sh1 ... sh2 .. (родительский связанный класс Shar) и т.д.
в первом кадре прописываю
Код AS3:

        if (contains(sh1))
        {
                var arr:Array = [sh1,sh2,sh3,sh4,sh5,sh6,sh7,
                                sh8,sh9,sh10,sh11,sh12,sh13,sh14,
                                sh15,sh16,sh17,sh18,sh19,sh20,sh21];
 
 
                for(var i:int = 0; i<arr.length; i++)
                {
                arr[i].shar1.mouseEnabled = false;
                }
        }

но вот беда, все работает, но в консоле выбивает ошибку
TypeError: Error #2007: Параметр child не должен быть равен нулю.
В чем дело?
И вообще, каким образом можно обратиться к экземпляру класса, не указывая имени этого экземпляра, т.е. в моем случае if(contains(object as Shar)) или как?

caseyryan 14.12.2015 06:19

Цитата:

Сообщение от Dmitriy154 (Сообщение 1189647)
this как бы используется только в методах (и конструкторе), ну да ладно, у меня родился второй вопрос.
Работаю в Flash IDE, в определенной кадре на сцену добавляются шары с именами sh1 ... sh2 .. (родительский связанный класс Shar) и т.д.
в первом кадре прописываю
Код AS3:

        if (contains(sh1))
        {
                var arr:Array = [sh1,sh2,sh3,sh4,sh5,sh6,sh7,
                                sh8,sh9,sh10,sh11,sh12,sh13,sh14,
                                sh15,sh16,sh17,sh18,sh19,sh20,sh21];
 
 
                for(var i:int = 0; i<arr.length; i++)
                {
                arr[i].shar1.mouseEnabled = false;
                }
        }

но вот беда, все работает, но в консоле выбивает ошибку
TypeError: Error #2007: Параметр child не должен быть равен нулю.
В чем дело?
И вообще, каким образом можно обратиться к экземпляру класса, не указывая имени этого экземпляра, т.е. в моем случае if(contains(object as Shar)) или как?

Читаем матчасть и просвещаемся. Чтобы не возникало всяких "как бы"
this
contains()

Dmitriy154 14.12.2015 13:56

Да, очень развернутый ответ, спасибо, сам знаю, где искать

ZackMercury 14.12.2015 16:34

Цитата:

И вообще, каким образом можно обратиться к экземпляру класса, не указывая имени этого экземпляра, т.е. в моем случае if(contains(object as Shar)) или как?
Нужно знать, в каком контейнере лежат экземпляры, и знать, какому типу они принадлежат.
Вот пример:
someSprite - контейнер всех игровых объектов.
Star - класс нашей звезды.

Код AS3:

for(var i:int = 0; i < someSprite.numChildren; i ++)
{
  var elem:DisplayObject = someSprite.getChildAt(i);
  if(elem is Star)
  {
      //тут делаем нехорошие дела с elem
  }
}

но не стоит этим злоупотреблять, правильней добавлять все звёзды в массив и проходиться по массиву.


Часовой пояс GMT +4, время: 22:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.