Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.05.2016, 19:37
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 1  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
По умолчанию Как правильно сделать "переключатель" для игровых экранов?

1 экран - меню
2 экран - выбор персонажа
3 экран - выбор снаряжения
4 экран - игра

Скажите как правильно работать с экранами, может есть какой то урок на эту тему. Мне приходит в голову каждый экран создать классом на базе sprite, и из меню по onClick делать addChild(например 2 экран). Далее я выбрал персонажа и опять же по onClick что я делаю? Как правильно удалить себя со сцены и добавить следующий?

Старый 24.05.2016, 19:41
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 2  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
синглтон Layers с методами showChar, showGame, showMenu в данном случае пожалуй самый удобный вариант

Старый 24.05.2016, 20:02
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 3  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,270
либо экраны имплементят интерфейс IShowable с методами show/hide + класс StageMediator,хранящий ссылку на stage/root и добавляющий экраны когда надо.

Старый 26.05.2016, 18:17
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 4  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
либо экраны имплементят интерфейс IShowable с методами show/hide + класс StageMediator,хранящий ссылку на stage/root и добавляющий экраны когда надо.
А можно чуть более подробнее.

Если в main.as написать функцию которая будет делать addChild и removeChild по переданому ей параметру, а параметром будет выступать класс экрана. То как в AS передавать этот класс функции?

Старый 26.05.2016, 19:19
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,270
в as есть класс Class,но лучше его не использовать т.к. с его помощью можно передать в функцию все что угодно.Правильнее будет завести класс или интерфейс Showable от которого и наследовать все экраны и передавать не класс, а экземпляр класса.

Старый 26.05.2016, 19:59
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 6  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
в as есть класс Class,но лучше его не использовать т.к. с его помощью можно передать в функцию все что угодно.
Можно пример как передать класс Menu с помощью Class?

Цитата:
Сообщение от undefined Посмотреть сообщение
Правильнее будет завести класс или интерфейс Showable от которого и наследовать все экраны и передавать не класс, а экземпляр класса.
Мне не понятно как передавать классы или экземпляры классов в функцию, я пока тока разбираюсь с AS. Пример можно.

Старый 26.05.2016, 20:52
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 7  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,270
передача класса в метод:
Код AS3:
private function someMethod(someClass:Class) {
..
}
someMethod(Object);
Передача экземпляра класса:
Код AS3:
private function someMethod(screen:Showable) {
..
}
var myScreen:Showable=new MyScreen();// класс MyScreen наследует/имплементирует класс/интерфейс Showable
someMethod(myScreen);

Старый 27.05.2016, 22:19
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 8  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
передача класса в метод:
Код AS3:
private function someMethod(someClass:Class) {
..
}
someMethod(Object);
Код AS3:
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);
		}
	}
}
Выдает ошибку Implicit coercion of a value of type Menu to an unrelated type Class. Что не так сделал?


Цитата:
Сообщение от undefined Посмотреть сообщение
Передача экземпляра класса:
Код AS3:
private function someMethod(screen:Showable) {
..
}
var myScreen:Showable=new MyScreen();// класс MyScreen наследует/имплементирует класс/интерфейс Showable
someMethod(myScreen);
А зачем нужно наследовать/имплементировать? Нельзя просто в функцию передавать параметр который нужно и который функция будет делать addChild?

Старый 28.05.2016, 13:33
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 9  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,270
у тебя классическая путаница понятий класс/экземпляр класса.Советую таки почитать что-нибудь по ооп чтоб не плавать в терминологии(хоть мука того же самого).Например что делает эта строка:
Код AS3:
var MenuScreen:Menu = new Menu();
1)Создает переменную с именем MenuScreen, которая может содержать ссылку на экземпляр класса Menu.Альтернативно можно сказать может содержать ссылку на экземпляр объекта типа Menu.Слова "класс" и "тип данных" в большинстве случаев взаимозаменяемые, также как "экземпляр класса N"/"объект типа N".
2)Создается экземпляр\объект класса/типа Menu(new Menu()), ссылка на свежесозданный объект кладется в переменную MenuScreen.
Короче класс - это просто описание типа данных(какую информацию он содержит и что может с ней делать).Экземпляр класса - то, что получается в результате работы оператора new.Т.е. классов обычно немного, а объекты могут штамповаться сотнями.
Дальше
Цитата:
Выдает ошибку Implicit coercion of a value of type Menu to an unrelated type Class. Что не так сделал?
Это потому что ты спрашивал как тебе передать класс в метод(в as для этого есть специальный тип данных Class),а ты туда передаешь экземпляр класса Menu.Если совсем не хочется запариваться - пиши
Код AS3:
public function ShowScreen(Screen:Menu)
Т.е. метод ожидает что ему дадут на вход ссылку на объект типа Menu.
Цитата:
А зачем нужно наследовать/имплементировать?
Наверно это пока рано.

Старый 28.05.2016, 14:42
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 10  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
Наверно это пока рано.
Наследовать надо что бы можно было передать разные экземпляры (разные экраны) разных классов? То есть если остальные экраны будут расширять Menu я смогу и их передавть в:

Код AS1/AS2:
public function ShowScreen(Screen:Menu)
?

Спасибо за развернутый ответ!

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.