Moai SDK で作るタップゲー (プロローグ画面の作成)

要は、タップしたら次のシーンに進むあたりを実装します。 実装したいことは

  • プロローグのメッセージと “Tap to Start” っていう文字列の表示。 “Tap to Start” の方は明滅させたい。
  • スクリーンがタップされたら次の状態に進ませる。

だけです。
そして、これを実装したコードが、以下のようになります。

--! \file
--! \brief プロローグの表示

require("name_input")


_G.prologue = {}

local layer_ = nil
local is_tapped_ = false


local function update_components()
   Gui.layers:remove(layer_)
   layer_ = Layer:new()

   -- !!! 背景画像

   local message = Gui.set_text_label(C.prologue.message)
   layer_:insert(message)

   local tap_message = Gui.set_text_label(C.prologue.tap_message)
   layer_:insert(tap_message)

   -- tap_message の明滅を指示する
   -- !!!

   Gui.layers:push_front(layer_)
  end


prologue["Enter"] = function(state)
   update_components()

   is_tapped_ = false

   -- フェード・イン
   Gui.screen:fade_in(C.fade_second)
end


prologue["Execute"] = function(state)
   if Input:force_redraw() then
      update_components()
   end

   -- tap されたら次のシーンに遷移させる
   local x, y, up = Input:pointer()
   if up then
      Gui.screen:fade_out(C.fade_second)
      is_tapped_ = true
   end

   -- フェードアウトが完了したら次のシーンに遷移させる
   if is_tapped_ and not Gui.screen:is_fading() then
      state:change_to(name_input)
   end
end


prologue["Exit"] = function(state)
   Gui.layers:remove(layer_)
   layer_ = nil
end

dwarf_prologue_2014_1003

どこに何を配置する、という画像リソースの場所などの状態は constants.lua に記述してあるので、このコードでは主にロジック的なあたりを表現しています。

「文字列を明滅させるあたりは、どう記述するのが Moai SDK っぽいのか?」は、現在模索中です。 (いずれ実装します。