Разработка концепции меню для комплекса Flash игр

В процессе создания приложения, разработчик сталкивается с задачей создания интуитивно-понятного меню. Особенно проблематично сформировать меню для приложения, в которое включено несколько уровней. Для решения проблемы была разработана концепция приложения, которая основывается на использовании кадров как отдельных частей приложения.
Каждый кадр – это новое приложение (новый класс / MovieClip).

Концепция разработки меню игры

Разработка меню для Flash игры

Описание алгоритма разработки меню игры

В процессе реализации приложения на основе вышеописанной концепции, необходимо выполнить инициализацию и установку слушателей на компоненты (кнопки) второго кадра класса ClistGame. Данный пункт выполняется для того, чтобы в процессе инициализации приложения, можно было осуществлять обработку событий элементов размещенных на втором кадре через класс CMain.
Номер кнопки соответствует номеру игры, класс которой формируется из имени CGame и номера игры. Для перехода в соответствующий кадр с игрой, выполняется выборка номера игры + 2. Число 2 увеличивает переход на два кадра, т.к. на первом кадре реализовано главное меню приложения, на втором кадре расположено меню с играми (или уровнями), далее на кадрах располагаются игры.

  1. Достоинством концепции является простота в реализации и понятная структура приложения.
  2. Используя только кадры, можно легко осуществить переход к необходимой игре и внести правки.
  3. На временной шкале можно разместить слой, на котором можно расположить элементы, видимые во всех кадрах (например, кнопка развернуть, свернуть, звук вкл./выкл. и др.). Данный слой должен перекрывать слой с кадрами приложения. Реализация концепции основана на четырех функциях, которые описаны ниже.

public class Main extends MovieClip
{
  public function Main()
  {
     if (stage)
     {
	init();
     }
        else
     {
	addEventListener(Event.ADDED_TO_STAGE,init);
     }
  }

 private function init(e:Event=null):void
 {
   removeEventListener(Event.ADDED_TO_STAGE,init);
   addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 }

 //Инициализация элементов других кадров и установка слушателей на них
 private function enterFrameHandler(event:Event):void
 {
  switch (event.target.currentFrame)	// узнаем текущей кадр
  {
   case 1 :  // кадр 1
   //если слушатель не установлен на кнопку btnMenu, то необходимо его добавить
           if (! btnMenu.hasEventListener(MouseEvent.CLICK))
	   {
		btnMenu.addEventListener(MouseEvent.CLICK, toMenu);
	   }
		break;
   case 2 : // кадр 2
	   if (! listGame.startGame1.hasEventListener(MouseEvent.CLICK)) 
	   {
		listGame.startGame1.addEventListener(MouseEvent.CLICK, toGame);
	   }
	   if (! listGame.startGame2.hasEventListener(MouseEvent.CLICK))
	   {
		listGame.startGame2.addEventListener(MouseEvent.CLICK, toGame);
	   }				
	   if (! listGame.btnHome.hasEventListener(MouseEvent.CLICK))
	   {
		listGame.btnHome.addEventListener(MouseEvent.CLICK, toHome);
	   }
		break;
   }
  }
  // функция перехода к кадру на котором расположена игра
  private function toGame(e:MouseEvent):void
  {
	var str:String = e.currentTarget.name;	//узнаем имя кнопки игры  - например, startGame1
	var numberFrame:Number = Number(str.slice(9,str.length)) + 2; // номер кадра с игрой +2 - т.к. первый кадр- главное меню, второй - список игр	
	this.gotoAndStop(numberFrame);	// переход к необходимому кадру
  }
}