Показать сообщение отдельно
Старый 04.05.2011, 22:34
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 6  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Примерно так
Код AS3:
package {
 
	import flash.display.InteractiveObject;
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.utils.Dictionary;
 
	/**
	 * @author gloomyBrain
	 */
	public class Main extends Sprite {
 
		private const _buttons:Vector.<InteractiveObject> = Vector.<InteractiveObject>([
			myButton_1, 
			myButton_2, 
			myButton_3, // тут просто список кнопок
			myButton_4, 
			myButton_5
		]);
 
		// это текщая выбранная кнопка
		private var _selectedButton:InteractiveObject = null;
 
		// это словарь соответсвий между кнопками и вызываемыми действиями
		private const _handlers:Dictionary = new Dictionary();
 
		public function Main() {
 
			// задаем соответствия кнопка - функция
			_handlers[myButton_1] = myFunction_1;
			_handlers[myButton_2] = myFunction_2;
			_handlers[myButton_3] = myFunction_3;
			_handlers[myButton_4] = myFunction_4;
			_handlers[myButton_5] = myFunction_5;
 
			// добавляем всем кнопкам слушатели клавиатуры
			var len:int = _buttons.length;
			while (len--) {
				_buttons[len].addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
			}
 
		}
 
		private function onKeyDown(event:KeyboardEvent):void {
 
			switch (event.keyCode) {
 
				case 37:
					// выбираем следующую кнопку
					this.focusNext(true);
				break;
 
				case 37:
					// выбираем предыдущую кнопку
					this.focusNext(false);
				break;
 
				case 13:
 
					// ищем в словаре действие для данной кнопки
					var handler:Function = _handlers[event.currentTarget];
					if (!handler) return;
 
					// выполняем действие, если нашли
					handler.call();
 
				break;
 
			}
 
		}
 
		/**
		 * Выделить следующую кнопку
		 * 
		 * @param	forward	true, если двигаемся вперед, false если назад
		 */
		public function focusNext(forward:Boolean = true):InteractiveObject {
 
			// если сейчас никто не выбран, то будет выбрана первая кнопка
			// этот метод можно вызывать извне
			if (!_selectedButton) {
 
				_selectedButton = _buttons[0];
 
			}else {
 
				// получаем индекс следующей кнопки (в зависимости от направления движения)
				var index:int = _buttons.indexOf(_selectedButton);
				index += (int(forward) * 2) - 1; // -1 или +1
 
				if (index === _buttons.length) {
					index = 0;
				}else if (index < 0) {
					index = _buttons.length - 1;
				}
 
				// выбираем нужную кнопку
				_selectedButton = _buttons[index];
			}
 
			super.stage.focus(_selectedButton);
			return _selectedButton;
 
		}
 
		private function myFunction_1():void {
			// обработчик кнопки 1
		}
 
		private function myFunction_2():void {
			// обработчик кнопки 2
		}
 
		private function myFunction_3():void {
			// обработчик кнопки 3
		}
 
		private function myFunction_4():void {
			// обработчик кнопки 4
		}
 
		private function myFunction_5():void {
			// обработчик кнопки 5
		}
 
	}
 
}
__________________
...вселенская грусть