C言語でWindowアプリを作ったことがあるのかと言われればないし、ただ if、for,while,その他C言語におけるメモリ操作の基礎など、簡単な教本を理解し、目を通しただけで、
プログラムを組むとなると、全体の構成を考える必要性の重要さに気づき、それでもなかなかうまくまとまらずに困っています><。
汚くて質問するのも抵抗があるくらいなプログラムなのですが、今のところこのようになっています。
#include "DxLib.h"
int menu=0,playmusic=1,Start1,Key[256],White;
int back1/*menu*/,back2/*play1*/;
int Sound1/*menu*/,Sound2/*play1*/;
void Start(){
if(playmusic==0){
StopMusic();
playmusic=2;
}
if(playmusic==2)
PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );//バックグラウンド再生
DrawGraph( 0 , 0 , back1 , FALSE ) ;
}
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
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;//初期化と裏画面化
/*******A色定義********/
White = GetColor( 255 , 255 , 255 ) ;
/*******画像のメモリ読み込み*******/
back1 = LoadGraph( "image/back(play).png" ) ;
back2 = LoadGraph( "image/back(menu).png" ) ;
/*******音声のメモリ読み込み*******/
Sound1 = LoadSoundMem( "Sound/backmusic/menu(music).wav" );
Sound2 = LoadSoundMem( "Sound/backmusic/play(music).wav" );
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
if(menu==0){
if(playmusic == 1){
PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );//バックグラウンド再生
}
DrawGraph( 0 , 0 , back2 , FALSE ) ;
DrawString(100,100,"Xキーでゲームスタート\n",White);
playmusic=0;
}
if(Key[KEY_INPUT_X]==1 || menu==1){
Start();
menu=1;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
メインプログラムでは、基本的にメニュー画面の処理のみをし、それ以外の描画はすべて関数を使います。
(ゲームの1面! 2面! そういったものをどのように処理すればいいのか、ゲームプログラミングの館には記述がなかったので、気がついたら関数内で処理するしかなくなってました。
どうしても改善すべきだ・・・ 先々困る!といったことがあるようでしたら、ご指摘くださると幸いです。 複雑になる前階で修正したいと思います)
本題なのですが、Xキーを押すとMenu画面を抜け、ゲームプレイ画面に行くのですが、メニュー画面、ゲームプレイ画面でそれぞれBGMを分けています。
それぞれ画面が移動すれば曲が切り替わるようにしたいのですが、メニュー画面を抜け、ゲームプレイ画面へ移動してもメニュー画面での曲が流れてしまいます。
ゲームプレイ画面の曲も同時に流れるのか、といいますと流れることもありません。
ただし、画面をクリックしている際とアクティブでない状態になると何故か流れます…。
if文で ~ の時は流し ~の時は流さない、~の時は曲をとめて BGM2を再生…
こういった分岐による流す流さないをいろいろ考えたのですが、二日かけてどうしても解決しなかったので質問させていただきました。
長文になって大変申し訳ないのですが、ご教示いただけると幸いです。