メニューの作成

=前置き=

RPG(のバトルシステムとか成長システム)の方向に進もうかと思うので、まずはその準備としてメニューをある程度簡単に作れるようにした。

時間がないので解説は省略。これから使っていくうちに変更する可能性も高いし。

Flash

ドラクエの戦闘画面を意識したメニュー。
操作方法はフォルダ操作的な感じで。

  • 十字キー
    • 移動
  • Enter
    • 決定
    • メニューを開く
  • BackSpace
    • キャンセル



=コード(の一部)=

一応、参考のためにコードの一部も。


とりあえず、以下のようなObjectを渡すことでメニューを生成できるようにしてみた。

public var g_Menu_Battle:Object =
{Type:GAWA_Command,//UI : コマンド
  list:[//コマンドに表示するリスト
    {ID:COMMAND_ATTACK,//「攻撃」
      next:{Type:GAWA_Target,//UI : ターゲット選択
        param:"trg",//選んだものは「trg」という名前で参照可能
        list:GetTargetMenu({//ターゲットに表示するリスト(の生成関数)
          next:AttackStart("trg")//選んだtrgを元に攻撃実行
        })
      }
    },
    {ID:COMMAND_ITEM,//「アイテム」
      next:{Type:GAWA_ItemList,//UI : アイテム選択
        param:"item_index",//選んだものは「item_index」という名前で参照可能
        list:GetItemMenu({//アイテムに表示するリスト(の生成関数)
          next:ItemStart("item_index")//選んだitem_indexを元にアイテム使用
        })
      }
    }
  ]
}

ガワ(UI)の部分はTypeで指定して、それぞれで表示を行ってもらう。
「敵」みたいにゲーム中に要素が変化する部分にも対応できるように、「GetTargetMenu」のような関数を指定できるようにした。(「配列やObjectを返す関数」を返す関数をセットしている)


C++だとMapをこんな風に設定できないので、マクロにする必要があるのかなー。関数の生成のところは「オブジェクトの生成+"()operator"のオーバライド」でなんとかなりそうだけど。