|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Как правильно сделать "переключатель" для игровых экранов?
1 экран - меню
2 экран - выбор персонажа 3 экран - выбор снаряжения 4 экран - игра Скажите как правильно работать с экранами, может есть какой то урок на эту тему. Мне приходит в голову каждый экран создать классом на базе sprite, и из меню по onClick делать addChild(например 2 экран). Далее я выбрал персонажа и опять же по onClick что я делаю? Как правильно удалить себя со сцены и добавить следующий? |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
синглтон Layers с методами showChar, showGame, showMenu в данном случае пожалуй самый удобный вариант
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
либо экраны имплементят интерфейс IShowable с методами show/hide + класс StageMediator,хранящий ссылку на stage/root и добавляющий экраны когда надо.
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
Если в main.as написать функцию которая будет делать addChild и removeChild по переданому ей параметру, а параметром будет выступать класс экрана. То как в AS передавать этот класс функции? |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
в as есть класс Class,но лучше его не использовать т.к. с его помощью можно передать в функцию все что угодно.Правильнее будет завести класс или интерфейс Showable от которого и наследовать все экраны и передавать не класс, а экземпляр класса.
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
Мне не понятно как передавать классы или экземпляры классов в функцию, я пока тока разбираюсь с AS. Пример можно. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
передача класса в метод:
Передача экземпляра класса: |
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Цитата:
package { import flash.display.Sprite; import flash.events.Event; import flash.display.*; public class Main extends Sprite { 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); } public function ShowScreen(Screen:Class) { addChild(Screen); } } } А зачем нужно наследовать/имплементировать? Нельзя просто в функцию передавать параметр который нужно и который функция будет делать addChild? |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
у тебя классическая путаница понятий класс/экземпляр класса.Советую таки почитать что-нибудь по ооп чтоб не плавать в терминологии(хоть мука того же самого).Например что делает эта строка:
1)Создает переменную с именем MenuScreen, которая может содержать ссылку на экземпляр класса Menu.Альтернативно можно сказать может содержать ссылку на экземпляр объекта типа Menu.Слова "класс" и "тип данных" в большинстве случаев взаимозаменяемые, также как "экземпляр класса N"/"объект типа N". 2)Создается экземпляр\объект класса/типа Menu(new Menu()), ссылка на свежесозданный объект кладется в переменную MenuScreen. Короче класс - это просто описание типа данных(какую информацию он содержит и что может с ней делать).Экземпляр класса - то, что получается в результате работы оператора new.Т.е. классов обычно немного, а объекты могут штамповаться сотнями. Дальше Цитата:
Т.е. метод ожидает что ему дадут на вход ссылку на объект типа Menu. Цитата:
|
|
|||||
Регистрация: Sep 2015
Сообщений: 69
|
Наследовать надо что бы можно было передать разные экземпляры (разные экраны) разных классов? То есть если остальные экраны будут расширять Menu я смогу и их передавть в:
? Спасибо за развернутый ответ! |
Часовой пояс GMT +4, время: 04:51. |
|
« Предыдущая тема | Следующая тема » |
|
|