|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Обычно в название суперклассов используют слово Base.Например BaseScreen. Сигнатуру ShowScreen в этом случае естественно надо будет сменить на |
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
А какой класс отвечает за функцию show/hide? Последний раз редактировалось Azrael; 28.05.2016 в 19:59. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
В плане что он не содержит реализацию своих методов - нет, это обычный класс. Вообще в AS нет абстрактных классов, но есть интерфейсы(полностью абстрактные классы). Цитата:
Цитата:
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Вызов HideScreen выдает ошибку "[Fault] exception, information=ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта."
Вы говорили про хранение ссылки на stage... Класс документа - package { import flash.display.Sprite; import flash.events.Event; import flash.display.*; public class Main extends Base { var MenuScreen:Menu = new Menu(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { ShowScreen(MenuScreen); } } } package { import flash.display.Sprite; public class Base extends Sprite { public function Base() { super(); } function ShowScreen(Screen:Base) { addChild(Screen); } function HideScreen() { removeChild(this); } } } package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.system.fscommand; import flash.text.*; public class Menu extends Base { var btn_play:MyButtonClass = new MyButtonClass(); public function Menu() { super(); btn_play.name = "btn_PLAY"; btn_play.label = "Play"; btn_play.addEventListener(MouseEvent.CLICK, btnMouseHandle); addChild(btn_play).y = 50; btn_play.x = 80 } function btnMouseHandle(e:MouseEvent):void { switch(e.target.name) { case "btn_PLAY": HideScreen(); // Вот тут ошибка break; case "btn_OPTIONS": break; case "btn_INSTRUCTIONS": break; case "btn_ABOUT": break; case "btn_EXIT": break; } } } } Последний раз редактировалось Azrael; 29.05.2016 в 17:00. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
ты не понял идею.Методы show/hide нужны чтоб выполнить некое действие при добавлении экрана в дисплей лист(воспроизвести анимацию появления например). добавлять/удалять их должен документ класс, который и хранит ссылку на стейдж. Сами экраны никуда себя добавлять не должны, поэтому им ссылку на стейдж иметь необязательно.Если никаких действий при появлении делать не требуется - наследуй все экраны от Sprite и не парься.
Добавлено через 3 минуты да и документ класс не стоит наследовать от чего-то отличного от Sprite.Еще раз:класс Base - общий родитель для всех экранов, содержащий функционал общий для всех экранов.Документ класс, конечно, к экранам никак не относится.Если у экранов нет общего функционала - то и не надо городить лишние классы.Другой вопрос, что в будущем такой функционал скорее всего появится и придется либо вручную добавлять его во все классы-экраны,либо добавить его один раз в супер класс. Таки настойчиво прошу почитать хоть что-нибудь по теме. |
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
Все экраны это классы, при необходимости отобразить след. экран как и откуда (из экземпляра текущего экрана?) удалять/добавлять со сцены? |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
после "нажали играть" экран посылает событие что пора сменить экран.Кто-то, у кого есть доступ к стейджу ловит это событие (в твоем случае это документ класс, но это может быть кто угодно) и решает что делать дальше какой экран скрыть, а какой показать.
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
На что ссылается this в этом коде?
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Этот код у меня в обработчике onClick одной из кнопок меню, если я правильно понимаю, он ссылается на экземпляр класса в котором эта кнопка находится.
|
Часовой пояс GMT +4, время: 10:31. |
|
« Предыдущая тема | Следующая тема » |
|
|