Проведите вечер, и заблаговременно за вашу мудрость.AS3: избегайте нескольких экземпляров того же класса
медведь со мной, если я показываю невежество, но вот как мой проект в настоящее время построено:
-TitleScreen: первый класс, который появляется. Расширяет Sprite. -Startup: класс, который я использую для вызова других классов. Расширяет Sprite. -GameScreen: класс «игровой движок». Расширяет AssetsHandler. -AssetsHandler: где большинство методов манипулирования активами. Расширяет GrfAssetsStore. -GrfAssetsStore: где хранятся все графические активы. Расширяет Sprite. -Level01: класс первого уровня. Расширяет GameScreen.
Теперь: когда я начинаю все, все очень хреново. Итак, допустим, я завершаю уровень 1, и я хочу перезапустить или перейти на экран заголовка: опять никаких проблем, НО я повторно создаю класс GameScreen и, в свою очередь, AssetsHandler и, в свою очередь, GrfAssetsStore. Имейте в виду, что я не настроил каких-либо EventListeners, которые вызывают их обратно -indeed, я пытался убедиться, что когда-то они начнутся, они останутся безмятежными, но, по моему невежеству, я понял, что перезапуск Level01, в свою очередь, расширяется другие классы.
Понятно, что это очень нежелательно, но пока я не могу его преодолеть. Я попробовал просто создать суперклассы в классе Level01.
Цель состоит в том, что GameScreen, AssetsHandler и GrfAssetsStore работают под капотом, так сказать, в то время как новые уровни начинаются и заканчиваются, но без очереди перезагружают суперклассы, просто получая от них методы/переменные и т. Д.
Итак: как мне преодолеть это? И нет, я не очень опытен в AS3, поэтому я ценю, насколько это очевидно для реальных экспертов, поэтому я здесь.
Если мне нужно что-нибудь сказать, пожалуйста, не стесняйтесь говорить такие слова.
РЕДАКТИРОВАТЬ: вопрос теперь я считаю не расширением, но я не неправильно ссылаюсь на переменные и т. Д., Благодаря Джошу за то, что помог мне реализовать это. Как вы уже упоминали, нет смысла отрицать один из основных аспектов ООП: поэтому я не должен обдумывать применение этой неправильной логики.
Я попытаюсь улучшить GC (и при необходимости усилить GC), пока я не удалю правильно все ссылки. Если это не сработает, хотя ... Я отправлю еще один, более подробный вопрос.
почему именно reinstantiating level01 проблема? почему это нежелательно? –
Перезапуск Level01 не является проблемой, так как я удалил из него всех детей перед перезапуском: проблема заключается в том, что расширенные классы получают повторное вызов, дублируя все эти переменные классов, дочерние элементы, слушатели и т. Д., Вызывая несогласованность и память бремя – ReaperOscuro