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

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

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

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Question Простой способ определения существования объекта

Есть какой-нибудь простой и эффективный способ определения наличия объекта? Пример:
Код AS3:
var tmpObj:objClass;
stage.addEventListener(MouseEvent.MOUSE_DOWN,putObject);
stage.addEventListener(MouseEvent.MOUSE_UP,killObject);
 
function putObject(e:MouseEvent):void{
tmpObj = new objClass();
addChild(tmpObj);
setTimeout(destroyer,3000);
}
function destroyer():void{
if(!tmpObj) return; // не работает
tmpObj.parent.removeChild(tmpObj);
}
function killObject(e:MouseEvent):void{
if(tmpObj!=null) return; // не работает
tmpObj.parent.removeChild(tmpObj);
}
Можно, конечно, воспользоваться getChildByName, например, но хочется какой-то более простой способ.
__________________
uglan

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

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Вот этот метод используйте
http://help.adobe.com/ru_RU/FlashPla...html#contains()

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Вот так надо написать:
Код AS3:
function killObject(e:MouseEvent):void{
if(tmpObj == null) return; 
tmpObj.parent.removeChild(tmpObj);
}


Переводя на человеческий язык, в этом методе у вас было
Код AS3:
если (ссылка на объект существует) обрываем функцию;
естественно ссылка жива, и до tmpObj.parent.removeChild(tmpObj); исполнение не доходит
Цитата:
Сообщение от alexandrratush Посмотреть сообщение
Вот этот метод используйте
http://help.adobe.com/ru_RU/FlashPla...html#contains()
Не надо этого делать. Этот метод вернет true, даже если объект содержится в одном из детей указанного контейнера

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

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
В вашем случае нужно проверять добавлен ли объект на сцену.


Последний раз редактировалось alexandrratush; 07.11.2013 в 19:58.
Старый 07.11.2013, 19:20
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 5  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Код AS3:
function killObject(e:MouseEvent):void{
if(tmpObj == null) return; 
tmpObj.parent.removeChild(tmpObj);
}
Такой способ тоже не работает(
Contains спасает, но он срабатывает также на вновь созданные инстансы. Там у меня setTimer стоит который вырубает объект созданный повторно...
__________________
uglan


Последний раз редактировалось uglan; 07.11.2013 в 19:21. Причина: тупанул
Старый 07.11.2013, 22:35
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 6  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
Цитата:
Сообщение от uglan Посмотреть сообщение
Есть какой-нибудь простой и эффективный способ определения наличия объекта?
Код AS3:
if(tmpObj.parent != null) {
  tmpObj.parent.removeChild(tmpObj);
}

Старый 08.11.2013, 00:05
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 7  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Сообщение от Anton Riot Посмотреть сообщение
Код AS3:
if(tmpObj.parent != null) {
  tmpObj.parent.removeChild(tmpObj);
}
Неа! Очень хотелось бы чтобы этот или подобные им работали но...
TypeError: Error #1009: Cannot access a property or method of a null object reference.

Пока лидирует contains, но это из той же области что и getChildByName. Неужели нет никакого простого способа?
__________________
uglan

Старый 08.11.2013, 00:21
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 8  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
разберитесь, что вы хотите проверять.
Код AS3:
if(tmpObj.parent != null) {
//есть ли tmpObj на сцене
}
Код AS3:
if(tmpObj != null) {
//есть ли tmpObj в памяти
}
Добавлено через 40 секунд
Код AS3:
if((tmpObj != null) && (tmpObj.parent != null)) {
//есть ли tmpObj в памяти и на сцене
}

Старый 08.11.2013, 00:33
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 9  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
О! Вот этот способ работает!)
Код AS3:
if((tmpObj != null) && (tmpObj.parent != null)) {...
У меня вылетает описанная выше ошибка при попытке обратиться к объекту который еще не был создан(не инициализирован и не добавлен в сцену) или уже удален, соответственно я ищу способ как это обойти. На что конкретно ругается флеш мне не понятно толи на отсутствие объекта в сцене то ли на его отсутствие в памяти. Однако если принудительно не обнулять(tmpObj=null) объект остается в памяти, так?

И еще не совсем понимаю почему tmpObj.parent!=null проверяет наличие объекта в сцене. Я и раньше сталкивался с таким примером, но в этом случае мы ведь получается проверяем существует ли родитель tmpObj а не сам объект? Разве нет?
__________________
uglan


Последний раз редактировалось uglan; 08.11.2013 в 00:34. Причина: дополнение
Старый 08.11.2013, 07:53
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от Anton Riot Посмотреть сообщение
разберитесь, что вы хотите проверять.
Код AS3:
if(tmpObj.parent != null) {
//есть ли tmpObj на сцене
}
Код AS3:
if(tmpObj != null) {
//есть ли tmpObj в памяти
}
Добавлено через 40 секунд
Код AS3:
if((tmpObj != null) && (tmpObj.parent != null)) {
//есть ли tmpObj в памяти и на сцене
}
Anton Riot, наличие у объекта родителя, еще не говорит о том, что он есть на сцене. Есть он на сцене или нет можно проверить так:
Код AS3:
if (tmpObj.stage != null) trace("на сцене");
но не так
Код AS3:
if (tmpObj.parent != null) trace("на сцене?");
uglan, вам показали рабочие способы. Вам стоит определить куда же все-таки добавляется объект и откуда он удаляется. Это должен быть один и тот же контейнер, чтобы все работало.
п.с. Ни один из способов не показывает наличие / отсутствие объекта в памяти. Это лишь проверка наличия ссылки на него

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

Теги
null , removeChild , undefined
Опции темы
Опции просмотра

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

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


 


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


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