Re: 画面移行処理 ( No.1 ) |
- 名前:sy(サイ) 日時:2009/12/27 14:08
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1502
スレタイが分かりにくいですがここで同じ質問が出てました。
|
Re: 画面移行処理 ( No.2 ) |
- 名前:white 日時:2009/12/27 14:37
switch文やc++の継承を使うなど、方法は色々ありますが
Googleなどで「シーケンス遷移」で検索されると、
それらの話がひっかかると思います。
「ゲームプログラマになる前に覚えておきたい技術」
「3DRPGプログラミング」などの本には、実例や解説が
出ているので、そのあたりを読まれるのもいいかも。
1冊あると便利だと思います。
|
Re: 画面移行処理 ( No.3 ) |
- 名前:YH 日時:2009/12/27 20:35
お返事ありがとうございます。
現在、シーケンス遷移や過去ログを見、
列挙体を用いて、switch文を打ち込んでいるのですが、
列挙体となるenumは、
ヘッダファイルに書き込むのでしょうか?
そう仮定して、新たなヘッダファイルを作成し、
以下のように書き込みました。
//ヘッダファイル
enum GameState{
GAME_Battle,
};
extern GameState g_gamestate;
そして、cppファイルに以下のソースを追加しました。
if(ch.walking_flag==1) //歩くフラグ
if(GetRand(4)==0){ //乱数の取得
switch( g_gamestate ){ //switch文
case GAME_Battle: //ヘッダファイルで定義
Battle(); //戦闘用画面関数
break;
default :
printfDx(" ");
break;
}
}
}
すると、次のようなエラーが表示されます。
1>test.cpp
1>c:サンプルプログラム実行用フォルダ\test.cpp(360) : error C2065: 'g_gamestate' : 定義されていない識別子です。
1>c:サンプルプログラム実行用フォルダ\test.cpp(360) : error C2050: switch 式の結果は、整数値になりませんでした。
1>c:サンプルプログラム実行用フォルダ\test.cpp(361) : error C2065: 'GAME_Battle' : 定義されていない識別子です。
1>c:サンプルプログラム実行用フォルダ\test.cpp(361) : error C2051: case 式は、整数型定数でなければなりません。
1>c:サンプルプログラム実行用フォルダ\test.cpp(367) : warning C4065: switch 文に 'default' はありますが 'case' ラベルがありません。
1>DxLib_VC2005用 - エラー 4、警告 1
こんな感じで困っているのですが、
ご教授頂きたいです。
フィールド画面から戦闘画面への遷移です。
全ソースコードをここに載せたほうが良いのでしょうか?
すみません。宜しくお願い致します。。。
|
Re: 画面移行処理 ( No.4 ) |
- 名前:sy(サイ) 日時:2009/12/27 20:35
externは実態が別のところにあると言う意味です。
.cppファイルに定義しなければ使う事は出来ません。
|
Re: 画面移行処理 ( No.5 ) |
- 名前:YH 日時:2009/12/27 20:59
度々、ご質問申し訳ありません。
つまり、externを削除し、列挙体は、.cppファイルに書き込む、という解釈で合っていますでしょうか?
(うえのレスに記述したヘッダは削除し、.cppファイルのみにする、という意味でしょうか?)
///////////////////////////////
.cppファイル
///////////////////////////////
enum GameState{
GAME_Battle,
};
GameState g_gamestate;
//中略
if(ch.walking_flag==1) //歩くフラグ
if(GetRand(4)==0){ //乱数の取得
switch( g_gamestate ){ //switch文
case GAME_Battle:
Battle(); //戦闘用画面関数
break;
default :
printfDx(" ");
break;
}
}
}
(上記でビルドすると、エラーは出ないものの、画面遷移は実行されず、同じ画面が被さって出力されます。)
|
Re: 画面移行処理 ( No.6 ) |
- 名前:sy(サイ) 日時:2009/12/27 22:44
///////////////////////////////
// //
// .hファイル //
// //
///////////////////////////////
enum GameState{
GAME_Battle,
GAME_Field,
};
// extern宣言をするとこのヘッダを読み込んだ.cppファイルはみんなこの変数を使用できる。
extern GameState g_gamestate;
///////////////////////////////
// //
// .cppファイル //
// //
///////////////////////////////
GameState g_gamestate; // 実態を定義
// 中略
//メインループ
while(true){
switch( g_gamestate ){ //switch文
case GAME_Battle:
Battle(); //戦闘用画面関数
break;
case GAME_Field;
Field(); //フィールド画面関数
break;
default :
printfDx(" ");
break;
}
}
前のスレ見ましたか? ^^;
|
Re: 画面移行処理 ( No.7 ) |
- 名前:YH 日時:2009/12/27 23:07
お返事ありがとうございます。
はい。見たのですが、
列挙型の記述の仕方がよく解りませんでした。。
やはり、ひとつメインの.cppを作成し、
そこから分割して作成するほうが良いのですね。
|