Форум 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=208439)

infbyte 20.07.2014 03:15

Сделал в цикле, заполнение массива и добавление на стол:
Код AS3:

myMovieClips.push(mc);
addChild(myMovieClips[n]);

Допустим у нас 50 карт.
Все создались - все ок.


Далее я создал кнопку "УДАЛИТЬ ВСЕ", которая удаляет все карты разом:

Код AS3:

for (var m = 0; m < myMovieClips.length; m++)
{
trace(myMovieClips.length);
 myMovieClips[m].parent.removeChild(myMovieClips[m]);
}

Все ок , удаляются нормально!



В каждой карте у меня есть событие на клик, которое производит удаление активной карты.
Код AS3:

mc.addEventListener(MouseEvent.CLICK, qwe333);
function qwe333(event:MouseEvent):void
        {
                var targetClip:MovieClip = event.target as MovieClip
                if (targetClip.parent)  targetClip.parent.removeChild(targetClip);
        }



Начинаю удалять карты вручную, осталось 40 карт!
Нажимаю на "УДАЛИТЬ ВСЕ" , которая должна пробежаться по всему массиву(по 50 элементам) и удалить, но она возвращает ошибку TypeError: Error #1009: Cannot access a property or method of a null object reference.

Что я обращаюсь к уже удаленному объекту.

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


Подскажите плиз:
1)как при проходе через массив, не обходить те 10 , элементы которых где я уже применил removeChild?
2) при нажатии на "function qwe333" - как узнать к какому элементу массива относится эта карта?
Просто если бы я это смог узнать , в этой кнопке сразу бы и удалял ячейку через splice

Добавлено через 11 минут
UPD:
все вроде решил вопрос костылем.
через оператор try catch

dimarik 20.07.2014 17:55

Цитата:

Сообщение от infbyte (Сообщение 1169331)
Подскажите плиз:
1)как при проходе через массив, не обходить те 10 , элементы которых где я уже применил removeChild?

Можно обойти все, но проверять у каждого присутствие stage или parent. Чтобы не обходить, необходимо уже обошедшие помещать в отдельный массив.
Цитата:

2) при нажатии на "function qwe333" - как узнать к какому элементу массива относится эта карта?
Просто если бы я это смог узнать , в этой кнопке сразу бы и удалял ячейку через splice
Можно воспользоваться методом Array#indexOf();
Код AS3:

var index:int = myMovieClips.indexOf(karta);
if (index != -1) {
    trace("Карта присутствует в списке под индексом",  index);
    myMovieClips.splice(index, 1);
}

Цитата:

все вроде решил вопрос костылем.
через оператор try catch
А вот это не нужно делать.


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

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