ゲームのシーン変更について

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

ゲームのシーン変更について

#1

投稿記事 by となな » 4年前

コード:

DXライブラリでゲームを作っているのですが、うまくシーンの変更ができません。

(main.cpp)
#include "DxLib.h"
#include "main.h"
#include "Keyboard.h"
#include "GameM.h"


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	SetMainWindowText("マ〇オ風アクション(仮)"), ChangeWindowMode(TRUE), DxLib_Init(); //ウインドウモードに設定、DXライブラリ初期化処理
	SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定

	GameM_riset(); //初期化
	
	//whileの中(画面に反映、メッセージ処理,画面クリア)
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
	{
		if (Keyboard_Get(KEY_INPUT_ESCAPE) > 0) //エスケープキーが押されたらすぐに終了
		{
			DxLib_End();
		}

		GameM_Update();
		
		Keyboard_Update(); //キー入力
	}
	DxLib_End(); // DXライブラリ終了
	return 0;
}

コード:

(main.h)
#ifndef DEF_MAIN_H
#define DEF_MAIN_H

typedef struct sin
{
	int flag; //シーン変更フラグ
}sin;

typedef struct status //ステータス構造体
{
	int x; //x座標
	int y; //y座標
	int attack; //攻撃力
}status;

#endif

コード:

(GameM.cpp)
#include "GameM.h"

void GM_riset()
{
	sin fl;
}


//計算
void GM_Update()
{
	fl.flag = 0; //シーン変更変数

	switch (fl.flag)
	{
	case 0: //メニュー描画
		fl = Menu_Update(fl);
		Menu_Draw(); 
		break;
	case 1: //キャラクターセレクト
		fl = chara_Update(fl);
		chara_Draw();
		break;
	}
}

コード:

(Game.h)

#ifndef DEF_GameM_H
#define DEF_GameM_H
#include "DxLib.h"
#include "Keyboard.h"
#include "main.h"

//初期化
void GameM_riset();

//計算
void GameM_Update();

#endif

GameM.cppのGameM_risetでsin flを宣言しているのですが、Game_Updateでは定義されていない変数とエラーが表示されてしまいます。
mainで初期化もしているのですが、なにが間違っているのでしょうか・・・。
アドバイスをお願いしたいです。よろしくお願いします。

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

Re: ゲームのシーン変更について

#2

投稿記事 by Rittai_3D » 4年前

GM_riset()内で宣言してある fl はGM_riset()内でのみ使用できます。
それ以外の場所では使用できません。

変数の寿命についての理解を深めましょう。
http://homepage3.nifty.com/mmgames/c_guide/12-01.htmlこの辺りが参考になるかと思います。
初心者です

となな

Re: ゲームのシーン変更について

#3

投稿記事 by となな » 4年前

3Dさん、返信ありがとうございます。リンク先の関数の寿命を読ませていただきました。
関数内でしか使えないことはわかったのですが、ではどこでflを宣言すればいいのでしょか・・・?

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

Re: ゲームのシーン変更について

#4

投稿記事 by Rittai_3D » 4年前

GameM.cpp内の必要な部分より前で定義すればよいです。

コード:

// GameM.cpp
static sin fl;

void Init()
{
    /* 初期化 */
}

void Proc()
{
    /* 何か */
}
とすれば Init() でも Proc() でもflが使用できます。

コード:

// GameM.cpp

void Init()
{
    /* 初期化 */
}

static sin fl;

void Proc()
{
    /* 何か */
}
とすれば Init() 内ではflは使用できませんが Proc() では使用できます。
初心者です

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: ゲームのシーン変更について

#5

投稿記事 by Dixq (管理人) » 4年前

こちらに作り方を紹介しているのでご覧ください。

http://dixq.net/g/


「ゲームプログラミング設計」と「メニュー画面の作り方」です。

ちなみにシーンはsinではなくSceneです。
ステータス構造体が
int x; //x座標
int y; //y座標
int attack; //攻撃力
を持っている理由がよく分かりません。
また、構造体にflagを持たせると破たんの元なのでお勧めしません。
bool is○○;
と名付けた方が分かりやすいでしょう。

となな

Re: ゲームのシーン変更について

#6

投稿記事 by となな » 4年前

管理人さん、返信ありがとうございます。
sinは自分的にわかりやすいという理由です、すいません。
ステータス構造についてですが、他にキャラクター情報を記述しているファイルがあり、そこで使っています。

http://dixq.net/g/ はほぼ毎日閲覧させてもらっています。
「ゲームプログラミング設計」と「メニュー画面の作り方」も何回も読んでいるのですが、理解できないことが多く、またなにが理解できていなのかもわかっていない状況にあります。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: ゲームのシーン変更について

#7

投稿記事 by Dixq (管理人) » 4年前

私が書いた解説を紹介してお読み頂いても
「なにが理解できていないかもわからない」と言われてしまってはどうアドバイスしていいのかわかりません。
とりあえずここが分からないから先に進めないんだという点があると思います。
その最初から紐解いていきましょう。

となな

Re: ゲームのシーン変更について

#8

投稿記事 by となな » 4年前

返信ありがとうございます。
もう少し調べて目的がはっきりしたらまた質問させていただくかもしれません。ありがとうございました。

閉鎖

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