Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.07.2014, 03:15
infbyte вне форума Посмотреть профиль Отправить личное сообщение для infbyte Найти все сообщения от infbyte
  № 11  
Ответить с цитированием
infbyte

Регистрация: Jul 2013
Сообщений: 29
Сделал в цикле, заполнение массива и добавление на стол:
Код 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


Последний раз редактировалось infbyte; 20.07.2014 в 03:27.
Старый 20.07.2014, 17:55
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 12  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от infbyte Посмотреть сообщение
Подскажите плиз:
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
А вот это не нужно делать.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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