Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удалением объекта со сцены (http://www.flasher.ru/forum/showthread.php?t=132249)

FX2000 07.11.2009 18:33

Удалением объекта со сцены
 
Здравствуйте, возникает проблема при удалении объекта со сцены: после удаления его со сцены, на выводе получаю [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);


AS3Coder 07.11.2009 18:58

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

gloomyBrain 07.11.2009 19:24

Цитата:

Чтобы убить объект (ссылку на него) присвойте ему null
Вот только немного наоборот =)

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

Чтобы было понятно - для данного случая:
Код AS3:

new Boss()

- создается объект класса Boss
Код AS3:

boss = new Boss()

- создается объект класса Boss и переменная boss становится ссылкой на него.
Код AS3:

addChild(boss)

- объект, на который ссылается переменная boss, заносится в список отображения.

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

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

FX2000 07.11.2009 19:35

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

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

AS3Coder 07.11.2009 19:40

gloomyBrain Можно узнать про GarbageCollector, по-подробнее, хотя-бы ссылку

gloomyBrain 07.11.2009 19:46

Вы не можете "опять создать этот объект".
Вы можете создать новый объект того же класса. То есть не этот объект, а другой такой же как этот. А затем уже присвоить ссылку.
Чтобы было проще понять - представьте, что Ваш код выполняется справа налево:
Код AS3:

boss = new Boss();

Итак, справа налево, поехали:
1) new Boss() - "создать объект класса Boss"
2) boss = - "присвоить переменной boss значение"

UPD:
2 AS3Coder
ссылка про GarbageCollector

FX2000 08.11.2009 01:19

Спасибо за помощь, разобрался.


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

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