トップページ > 過去ログ > 記事閲覧
タイトル画面→ゲーム画面への移行など
名前:M.T 日時: 2008/10/14 22:18

はじめまして。 タイトル画面で何らかのボタンを押して、効果音と共にゲーム画面に遷移するようにしたいのですが、 ボタンを押しても効果音が鳴るだけで、ゲーム画面への移行をしてくれません。 とりあえず、今試しているのは場面をあらわすための変数(FrameNum)を一つ用意して、タイトル画面のときに1、ゲーム画面のときに2として、switch文で判断して、 タイトル画面でボタンを押すとFrameNumに2を代入するような形を取っています。 このような方法では無理なのでしょうか? 知恵を拝借できれば幸いです。

Page: 1 |

Re: タイトル画面→ゲーム画面への移行など ( No.1 )
名前:ZAP 日時:2008/10/14 23:22

該当部分のソースを見せてもらわないと、流石にこれだけではお答えのしようがありません。
Re: タイトル画面→ゲーム画面への移行など ( No.2 )
名前: 日時:2008/10/15 09:32

> このような方法では無理なのでしょうか? 方法は幾つかありますし、 可能かどうかということならそれでも可能です。 おそらく、M.Tさんが描いているアルゴリズムと 実際のアルゴリズムが異なるのでしょう。 プログラムは書いたとおりに動いても、 描いたとおりには動いてくれない物:-p
Re: タイトル画面→ゲーム画面への移行など ( No.3 )
名前:M.T 日時:2008/10/15 20:51

やっぱりソースを書いたほうがいいですよね。スイマセン。 関係ありそうなのはここら辺だと思うのですが・・・。 //メインループ while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){ RefreshTime = GetNowCount(); //今の時間を取得 ClearDrawScreen(); //裏画面のデータを全て削除 switch(g_FrameNo){ case START_FRAME: //スタート時 正直中身を関数化したいけどめんどい。 Gamestart(); break; case GAME_FRAME: //ゲーム中時 Gameplaying(); break; } FpsTimeFanction(); ScreenFlip(); //裏画面データを表画面へ反映 counter++; if(Key[KEY_INPUT_ESCAPE]==1) break; //Escapeが押されたら終了 while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ } //Gamestart(); void Gamestart(){ Title(); if(Key[KEY_INPUT_S]==1){ g_FrameNo = GAME_FRAME; } //Gameplaying(); void Gameplaying(){ Background(); Background2(); //PlayerShotCalc(); //ショット用 PlayerShotMove(); //PlayerShotDisp(); PlayerControl(); }
Re: タイトル画面→ゲーム画面への移行など ( No.4 )
名前:YKN 日時:2008/10/15 23:55

どこで効果音が鳴ってるのか判りませんが とりあえずタイトル画面から動かないってのなら g_FrameNoの中身をタイトル画面の隅にでも 表示してみたらどうですか?
Re: タイトル画面→ゲーム画面への移行など ( No.5 )
名前: 日時:2008/10/16 11:45

できれば、コンパイルできるソースを 載せて欲しかったですが。。。 とりあえず、メインループに入る前 g_FrameNoの初期値はどこで何を入れてますか?
Re: タイトル画面→ゲーム画面への移行など ( No.6 )
名前:ライブラリ使用者 日時:2008/10/16 16:56

同じような手法にて、画面遷移させてあるので処理方法としては可能でしょう。 他の皆さんも言われている通り、g_FrameNoの値を追っていくのがいいと思います。 画面でボタン押下してから、次のSwitch文までを追う。 VCを使われているのであれば、デバッグモードにて1行ずつ追っていくことをお薦めします。 (Borlandにも同様な機能があるのかは使ったことがないので分かりませんが) if(Key[KEY_INPUT_S]==1){   g_FrameNo = GAME_FRAME; 原因ですが、↑じゃないでしょうか? この条件では画面押下だけでは、値が切り替わらないですよね?
Re: タイトル画面→ゲーム画面への移行など ( No.7 )
名前:M.T 日時:2008/10/16 22:58

すいません、友人に見せたところ、一応の解決はいたしました。 解決はしたのですが、一箇所よくわからないところがありまして。 main.cppのここの部分 /* case START_FRAME: Title(); if(Key[KEY_INPUT_S]==1){ g_FrameNo = GAME_FRAME; } break; */ は、修正前 /* case START_FRAME: Gamestart(); break; */ という感じだったんです。 関数の中身はほぼ同じ(つもり)だったので、なんでこの違いで動くようになったのか自分にはよくわからなくて。 なんかものすごく見づらいですが、知恵をいただければ幸いです。 ###ソースは拾ったものの改造です;; /* main.cpp */ #include "DxLib.h" #include "GlobalVariable.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ extern void img_sound_load(); extern void initialization(); extern void SetColor(); extern void FpsTimeFanction(); extern void Gamestart(); extern void Gameplaying(); extern void Title(); int RefreshTime=0; int g_FrameNo = START_FRAME; //bool open=true; ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ) ; //裏画面を使用する。 img_sound_load(); initialization(); SetColor(); while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){ RefreshTime = GetNowCount(); //今の時間を取得 ClearDrawScreen(); //裏画面のデータを全て削除 switch(g_FrameNo){ case START_FRAME: //スタート時 正直中身を関数化したいけどめんどい。 //修正前の中身はGamestart();のみ Title(); if(Key[KEY_INPUT_S]==1){ g_FrameNo = GAME_FRAME; } break; case GAME_FRAME: //ゲーム中時 Gameplaying(); break; } FpsTimeFanction(); ScreenFlip(); //裏画面データを表画面へ反映 counter++; if(Key[KEY_INPUT_ESCAPE]==1) break; //Escapeが押されたら終了 while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ } DxLib_End() ; return 0 ; } /* start.cpp */ #include "DxLib.h" #include "ExternGV.h" extern void Title(); void Gamestart(){ Title(); if(Key[KEY_INPUT_S]==1){ g_FrameNo = GAME_FRAME; if(CheckSoundMem(sound_player_shot[0])==0) //現在ショット音が再生されていなければ PlaySoundMem(sound_player_shot[0],DX_PLAYTYPE_BACK); //ショット音を再生する } } /* game.cpp */ #include "DxLib.h" #include "ExternGV.h" //extern void PlayerShotCalc(); extern void PlayerShotMove(); extern void PlayerShotDisp(); extern void PlayerControl(); extern void Background(); extern void Background2(); void Gameplaying(){ Background(); Background2(); //PlayerShotCalc(); //ショット用 PlayerShotMove(); //PlayerShotDisp(); PlayerControl(); }
Re: タイトル画面→ゲーム画面への移行など ( No.8 )
名前:憂煉 日時:2008/10/17 22:49

あくまで私の予想ですが、変数のスコープに問題があったのではないでしょうか? もしかして"GlobalVariable.h"あたりで extern int g_FrameNo; というような宣言をしていたのではないでしょうか? 修正前:グローバル変数のg_FrameNoを変更していた。 修正後:WinMain関数の自動変数のg_FrameNoを変更するようにした。 このへんのページを読んでみてください。 ttp://www.geocities.jp/ky_webid/c/022.html
Re: タイトル画面→ゲーム画面への移行など ( No.9 )
名前:M.T 日時:2008/10/26 13:19

返事が遅くなってすいません。 まさに言われたとおりのことをやっていました。orz 色々と疑問が氷解したように思います。ありがとうございました。

Page: 1 |