Framework: Layers & GUI

После того, как мы отнаследовали от State наш игровой экран, нам нужно реализовать для него интерфейс. Для начала вот вам реализация класса State.
package  elmortem.states {
  import flash.display.Sprite;
  import flash.events.Event;
  
  public class State extends Sprite {
    public var attr:Object;
    
    public function State(attrIn:Object = null):void {
      attr = attrIn;
      addEventListener(Event.ADDED_TO_STAGE, onInit);
    }
    
    private function onInit(e:Event):void {
      removeEventListener(Event.ADDED_TO_STAGE, onInit);
      init();
      dispatchEvent(new StateEvent(StateEvent.INIT));
    }
    protected function init():void {}
    public function free():void {
      dispatchEvent(new StateEvent(StateEvent.FREE));
    }
    public function createLayer(name:String, parent:Sprite = null):Sprite {
      var layer:Sprite = new Sprite();
      layer.name = name;
      if (parent == null) parent = this;
      parent.addChild(layer);
      return layer;
    }
  }
}

Нас интересует метод createLayer. Он упрощает создание пустых спрайтов, которые затем используются в качестве слоёв для организации игровой графики. Для начала создадим слой GUI, в котором будет наш интерфейс. Сам интерфейс создаётся во Flash IDE и всем необходимым элементам выставляются соответствующие Instance Name'ы. Выглядит это примерно вот так.
public class Mainmenu extends State {
  // layers
  private var GUI:Sprite;

  // gui
  private var gui:GuiMainmenuProto;

  public function Mainmenu(attrIn:Object = null) {
    super(attrIn);
  }
  protected function init():void {
    // layers
    GUI = createLayer("GAME", this);

   // gui
   GUI.addChild(gui = new GuiMainmenuProto());
   ButtonManager.add(gui.btn_gameplay, onClick_Gameplay);
  }
  private function onClick_Gameplay(e:MouseEvent):void {
    Main.stateManager.show(new Gameplay());
  }
}

Класс ButtonManager реализует создание кнопок из обычных MovieClip. Его реализация у меня в последнее время несколько разрослась из-за различных нужд, поэтому листинг не привожу, но в целом там происходит установка событий, buttonMode и реакция на наведения и нажатия (смена кадров). Если будет сильно интересно, то может, всё-таки, и выложу листинг.

Игровая графика так же располагается в соответствующих слоях, но об этом позже...

Комментарии (4)

0
Все действия в коде? Может, проще использовать визуальное проектирование интерфейсов?

Лично мне удобно делать интерфейсы прямо во flash ide, и в интерфейсном классе лишь обрабатывать события.
0
GuiMainmenuProto — это мувик, созданный во Flash IDE. Так что визуальное проектирование присутствует в полном объёме. (:
0
пока не ясно, зачем нужен спрайт GUI?

т.е. почему нельзя добавить мув из библиотеки прямо в this:
this.addChild(gui = new GuiMainmenuProto());
0
Можно. Это просто пример.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.