ページ 11

switch文の中でBGMが再生されない。

Posted: 2015年7月16日(木) 01:06
by ChenNel
はじめての投稿です。
自分は専門学校でC言語を習っています。
今、個人でゲームを制作しているのですが、なぜかswitch文の中にPlaySoundMem()を使って再生するとBGMが再生されません。
PlaySoundMem()を外に出すと再生されています。
レベルの低い質問ですが、良ければ解答お願いします。

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月16日(木) 01:21
by ChenNel
code
//タイトル画面で使う素材のロード
void load_title(){

title.Gra[0] = LoadGraph("画像/タイトル/タイトル1.png");
title.Gra[1] = LoadGraph("画像/タイトル/タイトルボタン.png");
title.Gra[2] = LoadGraph("画像/タイトル/矢印.png");
title.music[0] = LoadSoundMem("音/BGM/オープニング.mp3");
}

//タイトル画面での操作
void title_control(){
int pad = GetJoypadInputState(DX_INPUT_PAD1);

if (Pad(pad) == UP){
title.pos = 0;
}else if (Pad(pad) == DOWN){
title.pos = 1;
}

if (Pad(pad) == GO){
if (title.pos == 0){
title.mode = 2;
}
else if (title.pos == 1){
title.mode = 2;
}
}

}

//タイトル画面の描画
void Draw_title(){

DrawGraph(0, 0, title.Gra[0], TRUE);

DrawRectGraph(70, 250, 0, 0, 219, 177 / 2, title.Gra[1], TRUE, FALSE);

DrawRectGraph(70, 350, 0, 177 / 2, 219, 177 / 2, title.Gra[1], TRUE, FALSE);

if (title.pos == 0){
DrawGraph(30, 280, title.Gra[2], TRUE);
}
else if (title.pos == 1){
DrawGraph(30, 380, title.Gra[2], TRUE);
}
}

int title_xxx(){

if (CheckSoundMem(title.music[0]) == 0){
PlaySoundMem(title.music[0], DX_PLAYTYPE_BACK, TRUE);
}

if (title.mode == 2){
DeleteSoundMem(title.music[0]);

}

switch (title.mode){

case 0:{
load_title(); title.mode = 1; break;
}
case 1:{
Draw_title();
title_control(); break;
}
case 2:{
DeleteGraph(title.Gra[0]);
DeleteGraph(title.Gra[1]);
StopSoundMem(title.music[0]);

title.mode = 0;

if (title.pos == 0){
return 0;
}
else if (title.pos == 1){
return 1;
}
}
}

return -1;
}
/code

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月16日(木) 13:48
by softya(ソフト屋)
codeタグにミスが有ります。[]無いのでcodeタグがタグとして認識されていません。
プレビューで確認して下さいね。

提示されたコードなんですが、これは問題がない方ですか?
ChenNel さんが書きました:

コード:

//タイトル画面で使う素材のロード
void load_title(){

	title.Gra[0] = LoadGraph("画像/タイトル/タイトル1.png");
	title.Gra[1] = LoadGraph("画像/タイトル/タイトルボタン.png");
	title.Gra[2] = LoadGraph("画像/タイトル/矢印.png");
	title.music[0] = LoadSoundMem("音/BGM/オープニング.mp3");
}

//タイトル画面での操作
void title_control(){
	int pad = GetJoypadInputState(DX_INPUT_PAD1);

	if (Pad(pad) == UP){
		title.pos = 0;
	}else if (Pad(pad) == DOWN){
		title.pos = 1;
	}

	if (Pad(pad) == GO){
		if (title.pos == 0){
			title.mode = 2;
		}
		else if (title.pos == 1){
			title.mode = 2;
		}
	}

}

//タイトル画面の描画
void Draw_title(){

	DrawGraph(0, 0, title.Gra[0], TRUE);

	DrawRectGraph(70, 250, 0, 0, 219, 177 / 2, title.Gra[1], TRUE, FALSE);

	DrawRectGraph(70, 350, 0, 177 / 2, 219, 177 / 2, title.Gra[1], TRUE, FALSE);

	if (title.pos == 0){
		DrawGraph(30, 280, title.Gra[2], TRUE);
	}
	else if (title.pos == 1){
		DrawGraph(30, 380, title.Gra[2], TRUE);
	}
}

int title_xxx(){	

	if (CheckSoundMem(title.music[0]) == 0){
		PlaySoundMem(title.music[0], DX_PLAYTYPE_BACK, TRUE);
	}

	if (title.mode == 2){
		DeleteSoundMem(title.music[0]);

	}

	switch (title.mode){

	case 0:{
			   load_title(); title.mode = 1; break;
	}
	case 1:{
			   Draw_title();
			   title_control(); break;
	}
	case 2:{
			   DeleteGraph(title.Gra[0]);
			   DeleteGraph(title.Gra[1]);
			   StopSoundMem(title.music[0]);

			   title.mode = 0;

			   if (title.pos == 0){
				   return 0;
			   }
			   else if (title.pos == 1){
				   return 1;
			   }
	}
	}

	return -1;
}

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月16日(木) 19:28
by Dixq (管理人)
現在問題と思っている方のソースコードの提示もお願いします。
それが無いと分からないです・・。

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月16日(木) 23:35
by box
ChenNel さんが書きました:

コード:

	case 0:{
			   load_title(); title.mode = 1; break;
	}
{
}
はふつう書かないでしょう。本題とは関係ないかもしれませんが。

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月17日(金) 00:01
by Rittai_3D
オフトピック
box さんが書きました:
ChenNel さんが書きました:

コード:

	case 0:{
			   load_title(); title.mode = 1; break;
	}
{
}
はふつう書かないでしょう。本題とは関係ないかもしれませんが。
こういうことがあるので、わたしはどんな時でもつけるのですが、普通は書かないものなのでしょうか?

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月17日(金) 20:41
by Dixq (管理人)
case文の中でローカル変数を定義しなければよいのでは?

Re: switch文の中でBGMが再生されない。

Posted: 2015年7月17日(金) 21:16
by Rittai_3D
オフトピック
>Dixqさん
そのとおりです。ローカル変数の宣言をしないなら書かなくとも問題ありません。
わたしは日記にも書いたとおり、処理の始まりと終わりが分かりやすくなるという理由で書いています。

>ふつう書かないでしょう
に「わたしは書くけど、これは普通じゃないのか?」と思ってofftopicで書きこみました。