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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.05.2016, 15:01
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 11  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Наследовать надо что бы можно было передать разные экземпляры (разные экраны) разных классов? То есть если остальные экраны будут расширять Menu я смогу и их передавть в:
Да, но лучше сделать один суперкласс для всех экранов и от него наследовать и Menu и все остальные экраны.В этом случае если захочется, например, сделать чтоб экраны появлялись с какой-нибудь анимацией достаточно будет код появления/исчезания дописать в этот суперкласс и все наследники автоматически унаследуют логику появления/исчезновения.И в будущем весь функционал, общий для всех экранов можно будет пихать в суперкласс.
Обычно в название суперклассов используют слово Base.Например BaseScreen. Сигнатуру ShowScreen в этом случае естественно надо будет сменить на
Код AS3:
public function ShowScreen(Screen:BaseScreen)

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

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
Да, но лучше сделать один суперкласс для всех экранов и от него наследовать и Menu и все остальные экраны.В этом случае если захочется, например, сделать чтоб экраны появлялись с какой-нибудь анимацией достаточно будет код появления/исчезания дописать в этот суперкласс и все наследники автоматически унаследуют логику появления/исчезновения.И в будущем весь функционал, общий для всех экранов можно будет пихать в суперкласс.
Обычно в название суперклассов используют слово Base.Например BaseScreen. Сигнатуру ShowScreen в этом случае естественно надо будет сменить на
Код AS3:
public function ShowScreen(Screen:BaseScreen)
А этот Base класс не абстрактный класс случаем получается?
А какой класс отвечает за функцию show/hide?


Последний раз редактировалось Azrael; 28.05.2016 в 19:59.
Старый 28.05.2016, 20:50
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 13  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
А этот Base класс не абстрактный класс случаем получается?
в плане того, что его экземпляры не создаются - да он абстрактный.
В плане что он не содержит реализацию своих методов - нет, это обычный класс.
Вообще в AS нет абстрактных классов, но есть интерфейсы(полностью абстрактные классы).
Цитата:
А какой класс отвечает за функцию show/hide?
Цитата:
В этом случае если захочется, например, сделать чтоб экраны появлялись с какой-нибудь анимацией достаточно будет код появления/исчезания дописать в этот суперкласс и все наследники автоматически унаследуют логику появления/исчезновения

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

Регистрация: Sep 2015
Сообщений: 69
Вызов HideScreen выдает ошибку "[Fault] exception, information=ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта."

Вы говорили про хранение ссылки на stage...

Класс документа -
Код AS1/AS2:
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);
		}	
	}
}
Код AS1/AS2:
package 
{
	import flash.display.Sprite;
 
	public class Base extends Sprite 
	{
 
		public function Base() 
		{
			super();
		}
		function ShowScreen(Screen:Base)
		{
			addChild(Screen);
		}
		function HideScreen()
		{
			removeChild(this);
		}
	}
}
Код AS1/AS2:
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;
				}
		}
	}
}
Получилось удалит добавив parent.removeChilde(this), но правильно ли так делать?


Последний раз редактировалось Azrael; 29.05.2016 в 17:00.
Старый 29.05.2016, 17:27
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 15  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
ты не понял идею.Методы show/hide нужны чтоб выполнить некое действие при добавлении экрана в дисплей лист(воспроизвести анимацию появления например). добавлять/удалять их должен документ класс, который и хранит ссылку на стейдж. Сами экраны никуда себя добавлять не должны, поэтому им ссылку на стейдж иметь необязательно.Если никаких действий при появлении делать не требуется - наследуй все экраны от Sprite и не парься.

Добавлено через 3 минуты
да и документ класс не стоит наследовать от чего-то отличного от Sprite.Еще раз:класс Base - общий родитель для всех экранов, содержащий функционал общий для всех экранов.Документ класс, конечно, к экранам никак не относится.Если у экранов нет общего функционала - то и не надо городить лишние классы.Другой вопрос, что в будущем такой функционал скорее всего появится и придется либо вручную добавлять его во все классы-экраны,либо добавить его один раз в супер класс.
Таки настойчиво прошу почитать хоть что-нибудь по теме.

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

Регистрация: Sep 2015
Сообщений: 69
Цитата:
Сообщение от undefined Посмотреть сообщение
Сами экраны никуда себя добавлять не должны, поэтому им ссылку на стейдж иметь необязательно.
Мой вопрос был как раз об этом. Есть экран с меню, нажали "Играть" - как правильно будет удалить меню со сцены и отобразить экран "Играть" который в свою очередь имеет еще несколько промежуточных экранов "Выбор персонажа", "Выбор локации" и т.д.

Все экраны это классы, при необходимости отобразить след. экран как и откуда (из экземпляра текущего экрана?) удалять/добавлять со сцены?

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

Регистрация: Oct 2006
Сообщений: 2,281
после "нажали играть" экран посылает событие что пора сменить экран.Кто-то, у кого есть доступ к стейджу ловит это событие (в твоем случае это документ класс, но это может быть кто угодно) и решает что делать дальше какой экран скрыть, а какой показать.

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

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

Код AS1/AS2:
this.stage.addChild(NextScreen);
parent.removeChild(this);

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

Регистрация: Oct 2006
Сообщений: 2,281
На что ссылается this в этом коде?

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

Регистрация: Sep 2015
Сообщений: 69
Этот код у меня в обработчике onClick одной из кнопок меню, если я правильно понимаю, он ссылается на экземпляр класса в котором эта кнопка находится.

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

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

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


 


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


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