ゲームは作れたが、メニューの作り方が分からない!そんな質問が多かったので今回はメニューの作り方を紹介します。
今回のメニュー画面の作り方は3節構成(全5節)で紹介します。
.1 で簡単な最小限なコードでメニューをまず作ってみます。
.2 でそれをファイル分割して中規模以上のゲーム開発にも対応できるようにします。
.3 でロード・破棄の仕組みも入れて完成です。
それでは、1章の内容に入っていきます。
まず、ごく簡単な作りでメニュー画面の基礎を作ってみましょう。
こんな感じでメインループの中から、現在何の画面(シーン)なのかという情報を元に処理を分岐させてみましょう。
#include "DxLib.h" typedef enum { eScene_Menu, //メニュー画面 eScene_Game, //ゲーム画面 eScene_Config, //設定画面 } eScene ; static int Scene = eScene_Menu; //現在の画面(シーン) //シーンを更新する void UpdateScene(){ DrawString(0,20,"Gキーでゲーム画面、Cキーで設定、Mキーでメニュー画面になります。",GetColor(255,255,255)); if(CheckHitKey(KEY_INPUT_G)!=0){ Scene = eScene_Game; } if(CheckHitKey(KEY_INPUT_C)!=0){ Scene = eScene_Config; } if(CheckHitKey(KEY_INPUT_M)!=0){ Scene = eScene_Menu; } } //メニュー画面 void Menu(){ DrawString(0,0,"メニュー画面です。",GetColor(255,255,255)); } //ゲーム画面 void Game(){ DrawString(0,0,"ゲーム画面です。",GetColor(255,255,255)); } //設定画面 void Config(){ DrawString(0,0,"設定画面です。",GetColor(255,255,255)); } int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ switch(Scene){//現在のシーンにあった処理をする case eScene_Menu://現在のシーンがメニューなら Menu();//メニュー画面 break; case eScene_Game://現在のシーンがゲームなら Game();//ゲーム画面 break; case eScene_Config://現在のシーンが設定なら Config();//設定画面 break; } UpdateScene();//シーンを更新する } DxLib_End(); // DXライブラリ終了処理 return 0; }
# 「static」と先頭についている変数はこのソースファイルからしかアクセスできないことを意味します。
「Scene」変数が今どのシーンなのかという状態を持っています。
この値を変更することでメインループから分岐する処理を制御しています。
今回はすべて一つのファイルに書きましたが、実際はMenuやGameの中身が膨大な大きさになるはずです。
従ってファイル分割を適切に行わないととても読めたコードになりません。
そこで、次の節で、メニュー部、ゲーム部、設定部、そしてシーン管理部に分けてみましょう。
- Remical Soft -