ページ 11

音楽が再生されない

Posted: 2015年2月17日(火) 12:22
by megaman
こんにちは、お久しぶりです。変わらず横スクロールアクションを制作しております。
制作も終盤になり、見た目の方へ力を入れているのですが、タイトル通り
音楽の再生で制作が止まってしまいました。

main.cpp

コード:

//タイトル画面描画
void DrawGameTitle(){
	DrawGraph(0, 0, g_imghandles.title, FALSE);		//タイトル画像を表示
	//テキスト表示
	DrawStringToHandle(400, 390, "PRESS 'Z' BUTTON",
		GetColor(0, 0, 0), g_middlefont);
	DrawStringToHandle(440, 490, "←→ JUMP = Z SHOT = X",
		GetColor(0, 0, 0), g_smallfont);

	PlaySoundMem(g_imghandles.bgm[13],DX_PLAYTYPE_LOOP);	//BGMの再生
	//キーをチェックしてゲーム画面に切り替え
	int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	if (IsAKeyTrigger(key) == TRUE) {
		PlaySoundMem(g_imghandles.se[4],DX_PLAYTYPE_BACK);	//SEの再生
		g_gamestate = GAME_MENU;
	}

}
タイトル画面、SEは再生されるのですが、前文のBGMが再生されません。
BGM、SE共にOGGファイルで保存しています。
資料が少なければ、申し訳ありませんが返信していただけると嬉しいです。
それでは、よろしくお願いいたします。

Re: 音楽が再生されない

Posted: 2015年2月17日(火) 12:30
by h2so5
PlaySoundMemは再生を開始するときに1回だけ呼ぶ関数です。

Re: 音楽が再生されない

Posted: 2015年2月17日(火) 15:11
by megaman
>h2so5さん
返信ありがとうございます。
一回だけというと、このDrawGameTitleが呼び出される前に
PlaySoundMemをすれば、再生できるということでしょうか?

Re: 音楽が再生されない

Posted: 2015年2月17日(火) 15:18
by softya(ソフト屋)
PlaySoundMemを1回だけ呼べば良いので、外でループしないように呼び出しても良いですし、1回しか呼び出さないようにフラグ変数で管理してもよいです。
あるいは、DrawGameTitleが呼び出された数をカウントしておいて0の時だけ呼び出しても良いでしょう。方法はたくさんあります。

Re: 音楽が再生されない

Posted: 2015年2月17日(火) 16:27
by megaman
PlaySoundMemの位置を変更すると無事再生することができました。
基本的にIF文で確認を取ってから使用すれば、つまづくこともなさそうですね。
>h2so5さん、softya(ソフト屋)さんありがとうございました。

コード:

	PlaySoundMem(g_imghandles.bgm[13],DX_PLAYTYPE_LOOP);	//BGMの再生
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();
		//画面描画関数に切り替え
		switch (g_gamestate)
		{
		case GAME_TITLE:
			DrawGameTitle();
			break;
		case GAME_MENU:
			DrawGameMenu();
			break;
		case GAME_MAIN:
			DrawGameMain();
			break;
		case GAME_CLEAR:
			DrawGameClear();
			break;
		case GAME_OVER:
			DrawGameOver();
			break;
		default:
			break;
		}
		ScreenFlip();
	}
現状前に出すだけですが、時間ができ次第「BGM変更関数」にでも分けてみたいと思います。