音楽が再生されない

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

音楽が再生されない

#1

投稿記事 by megaman » 9年前

こんにちは、お久しぶりです。変わらず横スクロールアクションを制作しております。
制作も終盤になり、見た目の方へ力を入れているのですが、タイトル通り
音楽の再生で制作が止まってしまいました。

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ファイルで保存しています。
資料が少なければ、申し訳ありませんが返信していただけると嬉しいです。
それでは、よろしくお願いいたします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 音楽が再生されない

#2

投稿記事 by h2so5 » 9年前

PlaySoundMemは再生を開始するときに1回だけ呼ぶ関数です。

megaman

Re: 音楽が再生されない

#3

投稿記事 by megaman » 9年前

>h2so5さん
返信ありがとうございます。
一回だけというと、このDrawGameTitleが呼び出される前に
PlaySoundMemをすれば、再生できるということでしょうか?

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

Re: 音楽が再生されない

#4

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

PlaySoundMemを1回だけ呼べば良いので、外でループしないように呼び出しても良いですし、1回しか呼び出さないようにフラグ変数で管理してもよいです。
あるいは、DrawGameTitleが呼び出された数をカウントしておいて0の時だけ呼び出しても良いでしょう。方法はたくさんあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

megaman

Re: 音楽が再生されない

#5

投稿記事 by megaman » 9年前

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変更関数」にでも分けてみたいと思います。

閉鎖

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