DXライブラリを使ったタイトル画面の表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
春拳

DXライブラリを使ったタイトル画面の表示について

#1

投稿記事 by 春拳 » 11年前

初めまして、C言語初心者です。
先日から大槻有一郎氏の「14歳からはじめるC言語わくわくゲームプログラミング教室」を見ながらDXライブラリを使って簡単なゲームを作成していたのですが、
118,119ページの「タイトル画面を表示する」という項目でタイトル画面が表示されず、詰まってしまいました。
何度か確認したのですが、ソースコードの問題なのか、表示する画像の問題なのかわかりません。
これがそのソースコードです。

コード:

#include <DxLib.h>

//グローバル変数
//時間計測用変数
int g_lasttime = 0;		//直前の計測時間
float g_frametime = 0;	//1ループにかかった時間
enum GameState{			//ゲーム状態
	GAME_TITLE, GAME_MAIN,
	GAME_CLEAR, GAME_OVER
};
GameState g_gamestate = GAME_TITLE;
int g_gametitleimg;		//タイトルイメージ
int g_heroimg;			//画像
float g_hx = 0, g_hy = 0;	//座標
//ボタン
BOOL g_akey_prev;			//直前のAボタンの状態

//関数プロトタイプ
void DrawGameTitle();
void DrawGameMain();
void DarwGameClear();
void DrawGameOver();
BOOL IsAKeyTrigger(int key);

int WINAPI WinMain(HINSTANCE h1, HINSTANCE hp, LPSTR lpC, int nC){
	//ウィンドウモードにする
	ChangeWindowMode(TRUE);
	//ウィンドウサイズを変更
	SetGraphMode(800, 600, 32);
	//DXライブラリ初期化
	if (DxLib_Init() == -1)return -1;

	//画像を読み込み
	g_gametitleimg = LoadGraph("タイトル画面.png");
	g_heroimg = LoadGraph("キャラ.png");

	SetDrawScreen(DX_SCREEN_BACK);
	g_lasttime = GetNowCount() & INT_MAX; //現在時刻の記録
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();
		//画面描画関数に切り替え
		switch (g_gamestate)
		{
		case GAME_TITLE:
			break;
		case GAME_MAIN:
			break;
		case GAME_CLEAR:
			break;
		case GAME_OVER:
			break;
		default:
			break;
		}
		ScreenFlip();
	}

	//待機
	WaitKey();
	//DXライブラリの終了処理
	DxLib_End();
	return 0;
}

//タイトル画面描画
void DrawGameTitle(){
		DrawBox(0, 0, 800, 600, GetColor(255, 255, 255), TRUE);
		DrawGraph(0, 0, g_gametitleimg, TRUE);

}
//ゲーム本編描画
void DrawGameMain(){
	//自キャラ移動
	int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	float mv = 80.0f*g_frametime; //移動量計算
	if (key & PAD_INPUT_UP)		g_hy -= mv;
	if (key & PAD_INPUT_DOWN)	g_hy += mv;
	if (key & PAD_INPUT_LEFT)	g_hx -= mv;
	if (key & PAD_INPUT_RIGHT)  g_hx += mv;
	DrawGraph(g_hx, g_hy, g_heroimg, TRUE);

}
//ゲームクリア画面描画
void DrawGameClear(){

}
//ゲームオーバー画面描画
void DrawGameOver(){

}
//キートリガー処理
BOOL IsAKeyTrigger(int key){
	if (key & PAD_INPUT_A){
		if (g_akey_prev == FALSE){
			g_akey_prev = TRUE;
			return TRUE;
		}
	}
	else {
		g_akey_prev = FALSE;
	}
	return FALSE;
}
使用しているOSはWindows7、コンパイラはVisual Studio 2013です。
皆さんの知恵を貸してください。

Rittai_3D
記事: 525
登録日時: 12年前

Re: DXライブラリを使ったタイトル画面の表示について

#2

投稿記事 by Rittai_3D » 11年前

メニュー画面を表示する関数が呼び出されていないのではないでしょうか。
DrawGameTitle()をメインループで呼び出せば(画像の読み込みに失敗していなければ)表示されると思います。

また、関係のないことですが、WaitKey()をメインループの後で呼び出している意味ってあるのでしょうか?
初心者です

春拳

Re: DXライブラリを使ったタイトル画面の表示について

#3

投稿記事 by 春拳 » 11年前

おお、表示されました! ありがとうございます!
本の通りにやっても表示されなかったので途方に暮れていました。本当にありがとうございました。
あと、WaitKey関数の意味はなかったっぽいです。御指摘ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る