C言語を一度勉強したのですが長い間離れていたのでかなり忘れてしまっている状態で再び勉強しながら作成しています。
DXライブラリを今回初めて使うのでこちらも勉強しています。
ゲームの骨格を作っていてメニュー画面からゲーム画面や設定画面に移行できるようにしようと思い、「ゲームプログラミングの館」様から「メニュー画面の作り方」のソースコードを使わせて頂き書いてみたのですがメニューの文字が一瞬表示されてすぐ消えてしまいます。
原因は「CreateFontToHandle」を毎回呼び出してしまっている事は分かったのですが対処の仕方が分からずつまずいてしまっています。
対処の仕方のご教授頂けると有難いです。
Menu.cpp
#include "Menu.h"
#include "SceneMgr.h"
#include "DxLib.h"
#include "Keyboard.h"
const static int GAME_Y = 240; //「Game Start」文字のy位置
const static int CONFIG_Y = 270; //「Option」文字のy位置
const static int MANUAL_Y = 300; //「Manual」文字のy位置
const static int END_Y = 330; //「Quit」文字のy位置
typedef enum{
eMenu_Game, //ゲーム
eMenu_Config, //設定
eMenu_Manual, //マニュアル
eMenu_End, //終了
eMenu_Num, //本項目の数
} eMenu ;
static int NowSelect = eMenu_Game; //現在の選択状態(初期はゲーム選択中)
//更新
void Menu_Update(){
if(Keyboard_Get(KEY_INPUT_DOWN)==1){//下キーが押されていたら
NowSelect = (NowSelect+1)%eMenu_Num;//選択状態を一つ下げる
}
if(Keyboard_Get(KEY_INPUT_UP)==1){//上キーが押されていたら
NowSelect = (NowSelect+(eMenu_Num-1))%eMenu_Num;//選択状態を一つ上げる
}
if(Keyboard_Get(KEY_INPUT_RETURN)==1){//エンターキーが押されたら
switch(NowSelect){//現在選択中の状態によって処理を分岐
case eMenu_Game://ゲーム選択中なら
SceneMgr_ChangeScene(eScene_Game);//シーンをゲーム画面に変更
break;
case eMenu_Config://設定選択中なら
SceneMgr_ChangeScene(eScene_Config);//シーンを設定画面に変更
break;
}
}
}
//描画
void Menu_Draw(){
int Handle00,Handle01,Handle02,Handle03; // データハンドル格納数
int Font00; //フォントハンドル格納変数
Handle00 = LoadGraph( "mydat/img/board/title1.png" ); // 画像をロード
Handle01 = LoadGraph( "mydat/img/board/title2.png" ); // 画像をロード
Handle02 = LoadGraph( "mydat/img/board/title3.png" ); // 画像をロード
Handle03 = LoadGraph( "mydat/img/board/title4.png" ); // 画像をロード
Font00 = CreateFontToHandle("メイリオ",15,3, DX_FONTTYPE_ANTIALIASING ) ;//"メイリオ"の15pt,太さ3のフォントを作成
DrawGraph( 1, 1, Handle00, TRUE ); // データハンドルを使って画像を描画
DrawGraph( 1, 1, Handle03, TRUE ); // データハンドルを使って画像を描画
DrawFormatStringToHandle(280, GAME_Y,GetColor(0,0,0),Font00,"Game Start");
DrawFormatStringToHandle(280, CONFIG_Y,GetColor(0,0,0),Font00,"Option");
DrawFormatStringToHandle(280, MANUAL_Y,GetColor(0,0,0),Font00,"Manual");
DrawFormatStringToHandle(280, END_Y,GetColor(0,0,0),Font00,"Quit");
int y=0;
switch(NowSelect){//現在の選択状態に従って処理を分岐
case eMenu_Game://ゲームを選択中なら
y=GAME_Y; //ゲームの座標を格納
break;
case eMenu_Config://設定を選択中なら
y=CONFIG_Y; //設定の座標を格納
break;
case eMenu_Manual://マニュアルを選択中なら
y=MANUAL_Y; //マニュアルの座標を格納
break;
case eMenu_End://終了を選択中なら
y=END_Y; //終了の座標を格納
break;
}
DrawStringToHandle(250, y,"→" ,GetColor(0,0,0),Font00);
}