トップページ > 過去ログ > 記事閲覧
画面移行処理
名前:YH 日時: 2009/12/27 12:54

DXライブラリを用いて、RPGを作成しているのですが、 フィールド画面から戦闘画面への移行処理をする場合は、 戦闘画面となる関数を呼び出すのか、 ファイルごとに分けるのか。 がわかりません。 また、そういった画面から別の画面へ移行する処理は、 どう実現すれば良いのでしょうか?

Page: 1 |

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を作成し、 そこから分割して作成するほうが良いのですね。

Page: 1 |