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

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

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

Регистрация: Aug 2013
Адрес: Москва
Сообщений: 59
По умолчанию Добавление слушателя предку

Доброго времени суток!
  • Есть объект, наследованный от MovieClip класса "А", который лежит прямо на сцене.
  • Есть объект (класса "Б"), добавленный addChild в класс "А", который тоже наследован от MovieClip.
Так вот, при добавлении объекта клааса "Б" в объект класса "А" вылетает ошибка:
Цитата:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at "Б"()
at "А"/add"Б"()
at "А"()
И не вылетает, если в классе "Б" нет слушателя
Код AS3:
stage.addEventListener(MouseEvent.MOUSE_UP, cStopDrop);
Код в самой функции такой:
Код AS3:
trace('OK');
Так вот, вопрос в следующем: как правильно добавить такой слушатель?

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Код AS3:
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
function onAddedToStage(e:Event):void
{
	removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
	stage.addEventListener(MouseEvent.MOUSE_UP, cStopDrop);
}
__________________
http://www.chessmax.ru

Старый 16.08.2013, 09:50
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Видимо, пытаетесь добавить слушателя прямо в конструкторе Б. То есть, когда объект еще даже не создан окончательно, и уж тем более еще не добавлен в СписокОтображения, а значит его свойство stage имеет значение null.
__________________
Reality.getBounds(this);

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Вы выложили реальный трейс?
Цитата:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at "Б"()
at "А"/add"Б"()
at "А"()
вот так вот прямо русскими буквами и пишет конструкторы классов "А"() и "Б"()?

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

Регистрация: Aug 2013
Адрес: Москва
Сообщений: 59
alexcon314, нет, в трейсе пишет по-другому, это я так упростил.

Добавлено через 6 минут
Спасибо большое за ответы! Я незнал, что нужно добавлять слушатель события добавления в стейдж. Всё теперь работает, но теперь возникла проблема: не получается через функцию в классе "Б" удалить этот самый объект, который добавлен в стейдж. Вот, если так:
Код AS3:
if (stage.getChildByName("nak")!=null) {
					stage.removeChild(nak);
					nak = null;
				}
ничего не убирается, а если так:
Код AS3:
stage.removeChild(nak);
, то:
Цитата:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
at flash.display:isplayObjectContainer/removeChild()
at "Б"/cStopDrop()
Как здесь быть? Спасибо

Старый 16.08.2013, 16:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
В первом сообщении Вы утверждали, что "этот самый объект" добавлен в экземпляр класса А. Теперь уверяете, что он находится в стейдже (чего он там делает вообще?). Удаляйте оттуда, где он находится на самом деле, и ошибок не будет.
__________________
Reality.getBounds(this);

Старый 16.08.2013, 16:19
Ioangum вне форума Посмотреть профиль Отправить личное сообщение для Ioangum Найти все сообщения от Ioangum
  № 7  
Ответить с цитированием
Ioangum

Регистрация: Aug 2013
Адрес: Москва
Сообщений: 59
Этот самый объект ("nak"-экземпляр вообще другого класса, "В" допустим) создаётся экземпляром "Б" и добавляется в стейдж, который (класс "Б") в свою очередь находится в экземпляре "А". Вот мне и надо через экз. "Б" удалить экз. "В". Просто я неверно назвал его "этим самым" в своём втором сообщении. Извиняюсь

Старый 16.08.2013, 16:40
ObOs вне форума Посмотреть профиль Отправить личное сообщение для ObOs Найти все сообщения от ObOs
  № 8  
Ответить с цитированием
ObOs
 
Аватар для ObOs

Регистрация: Jul 2009
Сообщений: 149
В какой контейнер добавили объект из того и нужно удалять.
Грубо: у какого объекта вызывали addChild(child), у того и removeChild(child) надо вызывать.

Старый 16.08.2013, 17:19
Ioangum вне форума Посмотреть профиль Отправить личное сообщение для Ioangum Найти все сообщения от Ioangum
  № 9  
Ответить с цитированием
Ioangum

Регистрация: Aug 2013
Адрес: Москва
Сообщений: 59
Я добавил в stage. Но stage.removeChild(nak) выдаёт ошибку, что-то про статические методы. Из экземпляра "Б" совсем-совсем нельзя? А если делаю removeChild(nak), то опять ошибка - пишет, что "предоставленный объект должен быть дочерним элементом вызывающего объекта

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

Регистрация: Jun 2013
Сообщений: 133
Код AS3:
if(nak.parent)
   nak.parent.removeChild(nak)


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

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

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


 


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


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