Удаление объекта из списка отображения

#actionscript-3

#actionscript-3

Вопрос:

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

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

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

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

Кто-нибудь может пролить свет на то, как полностью отключить мое mainmenu, когда это не нужно.

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

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

Ответ №1:

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

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

Комментарии:

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

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

3. Хорошо, итак, я отбрасываю идею null. Итак, если бы в классе MainMenu у меня была функция, которая сбрасывала его, как бы я вызвал ее до того, как она была удалена? Я немного запутался относительно того, как я могу иметь функцию сброса в классе, который удаляется из основного класса.

4. Внутри вашего класса MainMenu у вас должна быть общедоступная функция с именем reset(). В вашем основном классе, в вашей функции ‘confSubMenuOneScreen’, вы должны удалить ‘mainmenu’, затем вызвать mainmenu.reset(), чтобы вернуть меню в исходное состояние.