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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.08.2012, 04:42
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 1  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
По умолчанию Удаление клипа и Error #2007

Почему при удалении клипа выскакивает Error #2007?

Потёр все ссылки, все масивы, все слушатели,
Код AS3:
public class sc4_ImgViewer extends MovieClip {
...
trace(this+" "+this.name+" "+this.parent.getChildAt(1).name);
//выводит  [object sc4_ImgViewer] instance979 instance979
 
this.parent.removeChild(getChildByName(this.name));
//выводит  TypeError: Error #2007: Параметр child не должен быть равен нулю.
...
}
Как может объект быть равен нулю, если он принадлежит parent-у, у него есть имя и даже глубина?
Пробовал удалить из родителя - та же песня. Как вообще такое возможно - равен нулю?

Старый 19.08.2012, 04:59
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Может, вы имели в виду
Код AS3:
this.parent.removeChild(this);
?
А то вы пытаетесь достать из текущего объекта его ребенка с именем текущего объекта, а вовсе не ребенка.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 19.08.2012, 05:40
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 3  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
А...да...точно. Я тут уже вариантов перебрал кучу.
Действенной оказалась строка в родителе:
Код AS3:
MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
где Name - имя объекта, загноное в массив, а removeViewer стирает всё, что есть в мувике - переменные, ссылки и пр.

В чём именно разница при записях:
Код AS3:
MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
и
this.viewerContainer.MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
Всё, спать, спать, спать....

Старый 19.08.2012, 10:20
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Так лечше не делать никогда. Всегда есть шанс, что это будет объект null. Добавляйте проверку присутствия объекта, прежде чем пытаться его удалить

Старый 19.08.2012, 14:17
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 5  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Так лечше не делать никогда. Всегда есть шанс, что это будет объект null. Добавляйте проверку присутствия объекта, прежде чем пытаться его удалить
Она была в родителе, но не в ней суть. Не понятна логика обращения, почему к объектам MovieClip вдруг нельзя становится обращаться, как к MOvieClip? К тому же клип этот там должен быть, т.к. если его там нет - то это поперёк логики приложения.
У меня из списка просмотра, нужно подключить нужный просмотрщик: картинка, панорама, видео. В один объект это поочерёдно не засунуть, приходится создавать каждый раз новый, вычищать под 0 старый и обращаться к нему, чтобы стереть, потом делать новый клип и всё заново.

А сейчас вообще интересная ситуация.
У меня есть MovieClip в который я закидываю PV3D панораму, которой задаётся имя instance972. Как её remove-ить? Как к MovieClip-у к ней не обратиться, чтобы сказать родителю затереть клип, а не стереть - получить висяк в памяти....
Код AS3:
public class sc4_PanViewer extends BasicView {
...
trace(" PARENT:"+MovieClip(this.parent).name);
//TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать 
//com::sc4_PanViewer@2d98dcf1 в flash.display.MovieClip.
}
вопросец, однако.


Последний раз редактировалось zerAlex2; 19.08.2012 в 14:57.
Старый 19.08.2012, 15:12
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от zerAlex2 Посмотреть сообщение
В чём именно разница при записях:
Код AS3:
MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
и
this.viewerContainer.MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
В первом случае, производится попытка сконвертировать полученный объект в MovieClip (в случае неудачи возникнет исключение) и пытается вызвать у него метод removeViewer (в случае неудачи возникнет исключение)
Во втором случае у viewerContainer вызывается метод MovieClip (сомневаюсь, что вы ему этот метод создали), которому в качестве параметра передается полученный объект, если метод возвращает что-то вменяемое, то у этого вменяемого будет вызван метод removeViewer.

Добавлено через 4 минуты
Цитата:
Сообщение от zerAlex2 Посмотреть сообщение
У меня есть MovieClip в который я закидываю PV3D панораму, которой задаётся имя instance972. Как её remove-ить? Как к MovieClip-у к ней не обратиться, чтобы сказать родителю затереть клип, а не стереть - получить висяк в памяти...
Очевидно sc4_PanViewer не имеет в иерархии наследования MovieClip.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 20.08.2012, 02:04
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 7  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Ужасть.... В итоге изменил родителя на Sprite, вместо BasicView, и переделал всю 3D сцену. Теперь хоть можно по-человечески обращаться к объектам.

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

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

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


 


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


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