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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Артём, у стейджа нет прозрачности (IllegalOperationError)))))
Слушать стейдж совершенно нормально, он же плеер.
Ненормально отправлять детей в открытый космос в неизвестность на стейдж.
__________________
Reality.getBounds(this);

Старый 19.11.2013, 13:53
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 12  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Нет, подписываться на stage – вполне нормальная тема. У тебя есть ссылка на какой-то объект, так почему бы не послушать, что он там вещает?
Плохая затея что-то со stage делать – например, класть туда детей (addChild), или менять не знаю, прозрачность? ) Скорее всего об этом и говорил Wolsh.

По хорошему, вообщем-то, вынести всю клавиатурную логику в отдельное место, в отдельный класс, который будет вещать уже всем желающим о клавиатуре. Клавиатура у пользователя одна, так что вполне уместно сделать класс полностью из статичных полей – и ссылок тянуть не надо.
Почему это по хорошему? Ну, скажем, в будущем обнаружится, что если кнопку давить – то события начинают спамиться о том что кнопку быстро-быстро нажимают. Обычно этот эффект нежелателен, и в случае с отдельным классом вставить фикс придется только в этом одном месте.
мой кейменеджер
Код AS3:
package
{
	import flash.display.Stage;
	import flash.events.KeyboardEvent;
 
	public class KeyboardManager
	{
		static private var keys:Array = [];
 
		static public function init(_stage:Stage):void
		{
			_stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler);
			_stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler);
		}
 
		protected static function onKeyUpHandler(event:KeyboardEvent):void
		{
			keys[event.keyCode] = false;
		}
 
		protected static function onKeyDownHandler(event:KeyboardEvent):void
		{
			keys[event.keyCode] = true;
		}
 
		static public function isKeyDown($keyCode:int):Boolean
		{
			return keys[$keyCode];
		}
	}
}
Выходит класс меню будет выглядеть так ?
Код AS3:
package Menu
{
	public class GameMenu extends Sprite
	{
		public var icon:_iconLevel;
 
		public function GameMenu()
		{
			this.addEventListener(Event.ADDED_TO_STAGE, onAddStage);
		}
 
		protected function onAddStage(event:Event):void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onAddStage);
 
			icon = new _iconLevel();
			stage.addChild(icon);
 
			addListener();
		}
 
		public function addListener():void
		{
			icon.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
		}
 
		public function onClick(event:MouseEvent):void
		{
			dispatchEvent( new Event("CLICK_ICON"));
		}
 
	}
}

Старый 19.11.2013, 18:38
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 13  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Кейменеджер годится.
Только конвенция наименования... Во флеше принято использовать префикс "_" перед приватными переменными, а не параметрами. То есть в init просто stage, а keys как раз _keys. Знак доллара – указание, что метод проксирует зафинализированный. protected для статиков – ну, это... это нужно очень понимать, зачем Лучше private.

Про класс меню, как раз таки,
Код AS3:
stage.addChild(icon);
не надо так.

Надо icon положить в себя (в GameMenu). GameMenu же добавится в root тобой же. (это главный класс приложения, обычно его называют Main). А root уже сам флешплеер положит на stage. Получится,
stage -> root -> GameMenu -> icon. Всё логично, от большего-к-меньшему, и никто не ломится куда-то ввысь.
Т.к. stage здесь не нужен, то код можно сжать как-то так:
Код AS3:
package Menu
{
	public class GameMenu extends Sprite
	{
		public var icon:_iconLevel; //классы лучше называть с большой буквы, без подчеркивания вначале
 
		public function GameMenu(){
			icon = new _iconLevel();
			addChild(icon);
			icon.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
		}
 
		public function onClick(event:MouseEvent):void{
			dispatchEvent( new Event("CLICK_ICON"));
		}
 
	}
}

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

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

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


 


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


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