Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление клипа и Error #2007 (http://www.flasher.ru/forum/showthread.php?t=183342)

zerAlex2 19.08.2012 04:42

Удаление клипа и 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-у, у него есть имя и даже глубина?
Пробовал удалить из родителя - та же песня. Как вообще такое возможно - равен нулю?

ChuwY 19.08.2012 04:59

Может, вы имели в виду
Код AS3:

this.parent.removeChild(this);

?
А то вы пытаетесь достать из текущего объекта его ребенка с именем текущего объекта, а вовсе не ребенка.

zerAlex2 19.08.2012 05:40

А...да...точно. Я тут уже вариантов перебрал кучу.
Действенной оказалась строка в родителе:
Код AS3:

MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();

где Name - имя объекта, загноное в массив, а removeViewer стирает всё, что есть в мувике - переменные, ссылки и пр.

В чём именно разница при записях:
Код AS3:

MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
и
this.viewerContainer.MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();

Всё, спать, спать, спать....

caseyryan 19.08.2012 10:20

Так лечше не делать никогда. Всегда есть шанс, что это будет объект null. Добавляйте проверку присутствия объекта, прежде чем пытаться его удалить

zerAlex2 19.08.2012 14:17

Цитата:

Сообщение от caseyryan (Сообщение 1092799)
Так лечше не делать никогда. Всегда есть шанс, что это будет объект 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.
}

вопросец, однако.

alatar 19.08.2012 15:12

Цитата:

Сообщение от zerAlex2 (Сообщение 1092794)
В чём именно разница при записях:
Код AS3:

MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();
и
this.viewerContainer.MovieClip(this.viewerContainer.getChildByName(Name)).removeViewer();


В первом случае, производится попытка сконвертировать полученный объект в MovieClip (в случае неудачи возникнет исключение) и пытается вызвать у него метод removeViewer (в случае неудачи возникнет исключение)
Во втором случае у viewerContainer вызывается метод MovieClip (сомневаюсь, что вы ему этот метод создали), которому в качестве параметра передается полученный объект, если метод возвращает что-то вменяемое, то у этого вменяемого будет вызван метод removeViewer.

Добавлено через 4 минуты
Цитата:

Сообщение от zerAlex2 (Сообщение 1092815)
У меня есть MovieClip в который я закидываю PV3D панораму, которой задаётся имя instance972. Как её remove-ить? Как к MovieClip-у к ней не обратиться, чтобы сказать родителю затереть клип, а не стереть - получить висяк в памяти...

Очевидно sc4_PanViewer не имеет в иерархии наследования MovieClip.

zerAlex2 20.08.2012 02:04

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


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

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