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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ChenNel

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

#1

投稿記事 by ChenNel » 5年前

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

ChenNel

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

#2

投稿記事 by ChenNel » 5年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 5年前

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;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

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

#4

投稿記事 by Dixq (管理人) » 5年前

現在問題と思っている方のソースコードの提示もお願いします。
それが無いと分からないです・・。

box
記事: 1746
登録日時: 9年前

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

#5

投稿記事 by box » 5年前

ChenNel さんが書きました:

コード:

	case 0:{
			   load_title(); title.mode = 1; break;
	}
{
}
はふつう書かないでしょう。本題とは関係ないかもしれませんが。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Rittai_3D
記事: 525
登録日時: 7年前

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

#6

投稿記事 by Rittai_3D » 5年前

オフトピック
box さんが書きました:
ChenNel さんが書きました:

コード:

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

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

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

#7

投稿記事 by Dixq (管理人) » 5年前

case文の中でローカル変数を定義しなければよいのでは?

Rittai_3D
記事: 525
登録日時: 7年前

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

#8

投稿記事 by Rittai_3D » 5年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る