ページ 11

タイトルの移動ができません

Posted: 2015年1月19日(月) 14:37
by isyy
今ゲームのタイトル画面を作成してるのですが上手く飛ぶことができません
以下ソースコード(一部)
main.cpp

コード:

#define GLOBAL_INSTANCE 
#include "DxLib.h"
#include "secenMgr.h"
#include "GV.h"

//ループで必ず行う3大処理
int ProcessLoop(){
	if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
	if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
	GetHitKeyStateAll_2();//現在のキー入力処理を行う
	GetHitPadStateAll();  //現在のパッド入力処理を行う
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
	ChangeWindowMode(TRUE);//ウィンドウモード
	if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
	
	 SceneMgr_Initialize();

	while(ProcessLoop()==0){//メインループ
		
         void UpdateScene();//シーンを更新する
		music_ini();
		switch(func_state){
			case 0://初回のみ入る処理
				load();		//データロード
				first_ini();//初回の初期化
				func_state=98;
				break;
			case 98://STGを始める前に行う初期化
				ini();
				load_story();
				func_state=99;
				break;
			case 99:
				SceneMgr_Initialize();
				SceneMgr_Update();
				SceneMgr_Draw();
				SceneMgr_Finalize();
				func_state = 100;
				break;
			case 100://通常処理
								 enter_func_tm("最初");
				calc_ch();       enter_func_tm("キャラ計算");
				ch_move();       enter_func_tm("キャラ移動");
				cshot_main();    enter_func_tm("自機ショットメイン");
				enemy_main();	 enter_func_tm("敵処理メイン");
				boss_shot_main();enter_func_tm("ボスショットメイン");
				shot_main();	 enter_func_tm("ショットメイン");
				out_main();  	 enter_func_tm("当たり判定");
				effect_main();   enter_func_tm("エフェクトメイン");
				calc_main();	 enter_func_tm("計算メイン");
				graph_main();    enter_func_tm("描画メイン");
				bgm_main();		 enter_func_tm("BGMメイン");
				if(boss.flag==0)
					stage_count++;
				break;
			default:
				printfDx("不明なfunc_state\n");
				break;
		}
		music_play();			 enter_func_tm("音楽再生");
		fps_wait();				 enter_func_tm("待機した時間",1);
		if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
		ScreenFlip();//裏画面反映
		count++;

	}
	 SceneMgr_Finalize();


	DxLib_End();//DXライブラリ終了処理
	return 0;
}
secenMgr.cpp

コード:

#include "DxLib.h"
#include "config.h"
#include "Game.h"
#include "menu.h"
#include "secenMgr.h"

static eScene mScene     = eScene_Menu;    //シーン管理変数
static eScene mNextScene = eScene_None;    //次のシーン管理変数

static void SceneMgr_InitializeModule(eScene scene);//指定モジュールを初期化する
static void SceneMgr_FinalizeModule(eScene scene);//指定モジュールの終了処理を行う

//初期化
void SceneMgr_Initialize(){
    SceneMgr_InitializeModule(mScene);
}

//終了処理
void SceneMgr_Finalize(){
    SceneMgr_FinalizeModule(mScene);
}

//更新
void SceneMgr_Update(){
    if(mNextScene != eScene_None){    //次のシーンがセットされていたら
        SceneMgr_FinalizeModule(mScene);//現在のシーンの終了処理を実行
        mScene = mNextScene;    //次のシーンを現在のシーンセット
        mNextScene = eScene_None;    //次のシーン情報をクリア
        SceneMgr_InitializeModule(mScene);    //現在のシーンを初期化
    }
    switch(mScene){       //シーンによって処理を分岐
    case eScene_Menu:    //現在の画面がメニューなら
        Menu_Update();   //メニュー画面の更新処理をする
        break;//以下略
    case eScene_Game:
        Game_Update();
        break;
    case eScene_Config:
        Config_Update();
        break;
    }
}

//描画
void SceneMgr_Draw(){
    switch(mScene){      //シーンによって処理を分岐
    case eScene_Menu:   //現在の画面がメニュー画面なら
        Menu_Draw();    //メニュー画面の描画処理をする
        break;//以下略
    case eScene_Game:
        Game_Draw();
        break;
    case eScene_Config:
        Config_Draw();
        break;
    }
}

// 引数 nextScene にシーンを変更する
void SceneMgr_ChangeScene(eScene NextScene){
    mNextScene = NextScene;    //次のシーンをセットする
}

// 引数sceneモジュールを初期化する
static void SceneMgr_InitializeModule(eScene scene){
    switch(scene){          //シーンによって処理を分岐
    case eScene_Menu:       //指定画面がメニュー画面なら
        Menu_Initialize();  //メニュー画面の初期化処理をする
        break;//以下略
    case eScene_Game:
        Game_Initialize();
        break;
    case eScene_Config:
        Config_Initialize();
        break;
    }
}

// 引数sceneモジュールの終了処理を行う
static void SceneMgr_FinalizeModule(eScene scene){
    switch(scene){         //シーンによって処理を分岐
    case eScene_Menu:      //指定画面がメニュー画面なら
        Menu_Finalize();   //メニュー画面の終了処理処理をする
        break;//以下略
    case eScene_Game:
        Game_Finalize();
        break;
    case eScene_Config:
        Config_Finalize();
        break;
    }
}
secenMgr.h

コード:

#pragma once

 enum  eScene{
    eScene_Menu,    //メニュー画面
    eScene_Game,    //ゲーム画面
    eScene_Config,  //設定画面
    eScene_None,    //無し
};

void SceneMgr_Initialize();//初期化
void SceneMgr_Finalize();//終了処理
void SceneMgr_Update();//更新
void SceneMgr_Draw();//描画

// 引数 nextScene にシーンを変更する
void SceneMgr_ChangeScene(eScene nextScene);
config.cpp

コード:

#include "config.h"
#include "secenMgr.h"
#include "DxLib.h"

static int mImageHandle;    //画像ハンドル格納用変数

//初期化
void Config_Initialize(){
    mImageHandle = LoadGraph("images/Scene_Config.png");//画像のロード
}

//終了処理
void Config_Finalize(){
    DeleteGraph(mImageHandle);//画像の解放
}

//更新
void Config_Update(){
    if(CheckHitKey(KEY_INPUT_ESCAPE)!=0){//Escキーが押されていたら
        SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
    }
}

//描画
void Config_Draw(){
    DrawGraph(0,0,mImageHandle,FALSE);
    DrawString(0, 0,"設定画面です。",GetColor(255,255,255));
    DrawString(0,20,"Escキーを押すとメニュー画面に戻ります。",GetColor(255,255,255));
}
config.h

コード:

#pragma once

void Config_Initialize();//初期化
void Config_Finalize();//終了処理
void Config_Update();//更新
void Config_Draw();//描画
Game.cpp

コード:

#include "Game.h"
#include "secenMgr.h"
#include "DxLib.h"

static int mImageHandle;    //画像ハンドル格納用変数

//初期化
void Game_Initialize(){
    mImageHandle = LoadGraph("images/Scene_Game.png");    //画像のロード
}

//終了処理
void Game_Finalize(){
    DeleteGraph(mImageHandle);    //画像の解放
}

//更新
void Game_Update(){
    if(CheckHitKey(KEY_INPUT_ESCAPE)!=0){ //Escキーが押されていたら
        SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
    }
}

//描画
void Game_Draw(){
    DrawGraph(0,0,mImageHandle,FALSE);
    DrawString(0, 0,"ゲーム画面です。",GetColor(255,255,255));
    DrawString(0,20,"Escキーを押すとメニュー画面に戻ります。",GetColor(255,255,255));
}
Game.h

コード:

#pragma once

void Game_Initialize();//初期化
void Game_Finalize();//終了処理
void Game_Update();//更新
void Game_Draw();//描画
menu.cpp

コード:

#include "menu.h"
#include "secenMgr.h"
#include "DxLib.h"

static int mImageHandle;    //画像ハンドル格納用変数

//初期化
void Menu_Initialize(){
    mImageHandle = LoadGraph("images/Scene_Menu.png");    //画像のロード
}

//終了処理
void Menu_Finalize(){
    DeleteGraph(mImageHandle);    //画像の解放
}

//更新
void Menu_Update(){
    if(CheckHitKey(KEY_INPUT_G)!=0){//Gキーが押されていたら
        SceneMgr_ChangeScene(eScene_Game);//シーンをゲーム画面に変更
    }
    if(CheckHitKey(KEY_INPUT_C)!=0){//Cキーが押されていたら
        SceneMgr_ChangeScene(eScene_Config);//シーンを設定画面に変更
    }
}

//描画
void Menu_Draw(){
    DrawGraph(0,0,mImageHandle,FALSE);
    DrawString(0, 0,"メニュー画面です。",GetColor(255,255,255));
    DrawString(0,20,"Gキーを押すとゲーム画面に進みます。",GetColor(255,255,255));
    DrawString(0,40,"Cキーを押すと 設定画面に進みます。",GetColor(255,255,255));
}
menu.h

コード:

#pragma once

void Menu_Initialize();//初期化
void Menu_Finalize();//終了処理
void Menu_Update();//更新
void Menu_Draw();//描画
これをコンパイルすると通るのですがメニュー画面のほうの描画がすぐ終わってゲームのほうに飛ばされてしまいます。赤線でmain.cppの66行目の ScreenFlip();//裏画面反映に赤波線でオーバーロードされた関数ScreenFlipの複数のインスタンスが引数リストと一致します
と出ます。なぜでしょうか

Re: タイトルの移動ができません

Posted: 2015年1月19日(月) 15:58
by みけCAT
isyy さんが書きました:

コード:

			case 99:
				SceneMgr_Initialize();
				SceneMgr_Update();
				SceneMgr_Draw();
				SceneMgr_Finalize();
				func_state = 100;
				break;
これをコンパイルすると通るのですがメニュー画面のほうの描画がすぐ終わってゲームのほうに飛ばされてしまいます。
1フレームだけSceneMgr_*を用いた処理をした後、すぐにfunc_state=100の「ゲームのほう」(?)の処理に移るプログラムが書かれているからだと思います。

Re: タイトルの移動ができません

Posted: 2015年1月19日(月) 20:32
by isyy
ありがとうございます。無事解決できました