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

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

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

Регистрация: Sep 2009
Сообщений: 39
По умолчанию Удалением объекта со сцены

Здравствуйте, возникает проблема при удалении объекта со сцены: после удаления его со сцены, на выводе получаю [object Boss], а не null, то есть объект остается на сцене, просто становится невидимым. Помогите пожалуйста разобраться.

Создание объекта:
Код AS3:
boss=new Boss();
boss.x=stage.stageWidth/2;
boss.y=boss.height/2+stage.stageHeight/30;			
stage.addChild(boss);
Удаление происходит в классе этого же объекта:
Код AS3:
if(parent && parent.contains(this))
	parent.removeChild(this);


Последний раз редактировалось FX2000; 07.11.2009 в 18:36.
Старый 07.11.2009, 18:58
AS3Coder вне форума Посмотреть профиль Отправить личное сообщение для AS3Coder Найти все сообщения от AS3Coder
  № 2  
Ответить с цитированием
AS3Coder
 
Аватар для AS3Coder

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
Объект остается живым. Удаление со сцены, не убивает его. Ведь вам может понадобиться показать его еще раз. Чтобы убить объект (ссылку на него) присвойте ему null.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Чтобы убить объект (ссылку на него) присвойте ему null
Вот только немного наоборот =)

Объект - это объект, то есть участок в памяти. А переменная - это ссылка, позволяющая нам к этому участку обратиться.
Ссыслку мы обнулить можем - тогда флеш не будет видеть возможности обратиться к объекту (участку памяти) и участок будет очищен. А зачем, спрашивается, содерать данные, если использовать их все-равно не получится? (если ссылок на объект нет)
А вот сам объект обнулить напрямую - на это есть другие механизмы (GarbageCollector), которые в общем случае вручную не вызываются

Чтобы было понятно - для данного случая:
Код AS3:
new Boss()
- создается объект класса Boss
Код AS3:
boss = new Boss()
- создается объект класса Boss и переменная boss становится ссылкой на него.
Код AS3:
addChild(boss)
- объект, на который ссылается переменная boss, заносится в список отображения.

С момента занесения объекта в список отображения, на него, фактически, имеется 2 ссылки: переменная boss (оно и понятно) и индекс в списке отображения ( то есть мы можем обратиться к объекту двумя путями - через boss и через getChildAt())

Что происходит когда Вы удаляете объект со сцены? - одна из ссылок (та которая getChildAt()) на объект перестает работать. Однако, вторая ссылка (которая boss) как работала, так и работает.
По этому объект продолжает существовать
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 07.11.2009 в 19:36.
Старый 07.11.2009, 19:35
FX2000 вне форума Посмотреть профиль Отправить личное сообщение для FX2000 Найти все сообщения от FX2000
  № 4  
Ответить с цитированием
FX2000

Регистрация: Sep 2009
Сообщений: 39
AS3Coderспасибо, помогло.
gloomyBrain круто вы расписали, спсибо
То есть объект так просто удалить нельзя, а можно удалить ссылку, которая обращается к элементу, а потом свою работу сделает GarbageCollector?

А если мне нужно будет опять создать этот объект, нужно будет делать так как я делал или как-то иначе?

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

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
gloomyBrain Можно узнать про GarbageCollector, по-подробнее, хотя-бы ссылку

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Вы не можете "опять создать этот объект".
Вы можете создать новый объект того же класса. То есть не этот объект, а другой такой же как этот. А затем уже присвоить ссылку.
Чтобы было проще понять - представьте, что Ваш код выполняется справа налево:
Код AS3:
boss = new Boss();
Итак, справа налево, поехали:
1) new Boss() - "создать объект класса Boss"
2) boss = - "присвоить переменной boss значение"

UPD:
2 AS3Coder
ссылка про GarbageCollector
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 07.11.2009 в 21:17.
Старый 08.11.2009, 01:19
FX2000 вне форума Посмотреть профиль Отправить личное сообщение для FX2000 Найти все сообщения от FX2000
  № 7  
Ответить с цитированием
FX2000

Регистрация: Sep 2009
Сообщений: 39
Спасибо за помощь, разобрался.

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

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

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


 


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


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