created: 2025/12/5
💬 GameMaker Advent Calendar 2025 に参加しています。
メインのBGMが鳴っている状態でイベントのBGMに割り込まれ、またメインBGMに戻った時、いつも最初から再生されるとなかなか後半までいかない、いつも前半ばかり聞かされるということが起こり得ます。さっきまで鳴ってたところから再開してほしいことがあります。
そんなときは audio_pause_sound と audio_resume_sound を使う方法があります。
今回は次のような仕様で作ります。
これはaudio_pause_soundとaudio_resume_soundの使用サンプルです。
今回はBGMを鳴らすオブジェクト o_bgm を作って全部これに実装します。
以下のコードはCreateイベントです。
/****************************
o_bgm : Create event
****************************/
main_bgm_instance = noone;
sub_bgm_instance = noone;
/// @desc メインBGMを開始する
/// @func play_main_bgm();
/// @param {Asset.GMSound} sound
play_main_bgm = function(sound)
{
// サブBGMを止める
audio_stop_sound(sub_bgm_instance);
sub_bgm_instance = noone;
if (audio_is_paused(main_bgm_instance))
{
// メインBGMをレジューム再生
audio_resume_sound(main_bgm_instance);
return main_bgm_instance;
}
else
{
// メインBGMを頭から再生
var instance = audio_play_sound(sound, 1, true);
return instance;
}
}
/// @desc サブBGMを再生する
/// @func play_sub_bgm();
/// @param {Asset.GMSound} sound
play_sub_bgm = function(sound)
{
// メインBGMをポーズ
audio_pause_sound(main_bgm_instance);
// サブBGMを頭から再生
return audio_play_sound(sound, 1, true);
}