2011-05-10 5 views
1

У меня есть приложение, которое использует основной класс для управления другими MovieClips, добавляя и удаляя их по мере необходимости, большинство из них - отдельные экраны или подменю.Удаление объекта из списка отображения

Когда я покидаю главное меню и возвращаюсь к нему позже с другого экрана, некоторые анимации и кнопки перелистывания по-прежнему воспроизводятся, что я не хочу, мне в основном нужен экран главного меню для сброса каждый раз, когда он отображается ,

Я прочитал об этом и узнал, что удаление ребенка не обязательно удаляет его из памяти.

Я попытался установить главное меню на нуль, прежде чем переходить на другой экран, но это породило ошибку, указав, что дочерний параметр должен быть ни один.

Может ли кто-нибудь пролить свет на то, как полностью убить мое главное меню, когда оно не понадобится.

public function confSubMenuOneScreen():void { 
     subMenuOneScreen = new SubMenuOne(); 
     mainmenu = null; 
     removeChild(mainmenu) 
     addChild(subMenuOneScreen) 
     currentScreen = subMenuOneScreen; 
    } 

Это пример кода, который удаляет меню и добавляет еще один экран, с MainMenu = нулевой код, который подбрасывает ошибку.

ответ

1

Ошибка, которую вы получаете, заключается в том, что вы устанавливаете объект в null, а затем пытаетесь удалить объект (который теперь является нулевым). Возможно, реверсирование двух строк устранит ошибку. Однако это не освободит объект от памяти, пока сбор мусора не удалит его (если в вашем приложении нет других ссылок на «mainmenu»).

Вместо того, чтобы пытаться удалить объект и создавать новые объекты каждый раз, когда вам это нужно, я бы предложил создать один экземпляр «mainmenu» и повторно использовать его. Затем просто удалите его из списка отображения и добавьте обратно, когда вам это нужно.

+0

Существует несколько функций, как указано выше, которые удаляют главное меню и добавляют другие экраны. Основная переменная меню объявляется в начале файла main.as, как вы удаляете что-то из списка отображения? – user747714

+0

removeChild() удаляет объект из списка отображения. Но, установив его в null, вам нужно создать новый экземпляр MainMenu каждый раз, когда вам нужно его добавить. Если вам нужно его сбросить, я бы создал функцию в классе «MainMenu» с именем reset(), который возвращает экземпляр в исходное состояние. – Corey

+0

Итак, я сломаю нулевую идею. Так что если в классе MainMenu у меня была функция, которая его перезагрузила, как бы я назвал это до его удаления? Я немного смущен относительно того, как у меня может быть функция сброса в классе, который удаляется из основного класса. – user747714

Смежные вопросы