最終更新日 2024-06-19

On_BGM再生直前

On_BGM再生直前

BGMが再生される直前に、
呼びだされるイベントハンドラとなります。

使い処

このイベントハンドラの引数である「BGM番号」「BGMシーン番号」「元ファイル名」
そして、他のクラスオブジェクトの判定を用いることで、
ほぼ無制限に曲数を増やすことが出来ます。
非常に細やかなBGMの割り振りが可能です。

使用例①

このイベントハンドラでは、返り値を文字列で返すと、
元のファイルの替わりに、指定のファイルを再生します。

もしも、該当のファイルが存在しない場合、
BGMは鳴りません。

自分で用意したBGMを再生する
String^ 天翔記クラス::On_BGM再生直前(int BGM番号, int BGMシーン番号, String^ 元ファイル名) {

  デバッグ出力 << 元ファイル名 << endl;
  // 何番のBGMを再生予定であろうとも…
  // BGMフォルダの中に、myBGM.kvs というファイルがあるならば、そちらにすり替える。
  if (System::IO::File::Exists("BGM\\myBGM.kvs") ) {
    return "myBGM.kvs";
  }

  return "";
}

使用例②

「BGM番号」とは、今まさに直後に再生されようとしているBGMの番号で、
特に何もしなければファイル名と一致します。
例えば、BGM番号が3であれば、BGM03.kvs が再生されます。

特定のBGM番号の時だけ、自分が用意したBGMを再生する
String^ 天翔記クラス::On_BGM再生直前(int BGM番号, int BGMシーン番号, String^ 元ファイル名) {

  // BGM番号3だけ自分で用意したファイルにすり替える
  if (BGM番号 == 3) {
    return "myBGM.kvs";
  }

  return "";
}

使用例③

「BGMシーン番号」とはBGMが再生されるシチュエーションのことです。
例えば、プレイヤ大名の戦略画面のターンが回ってきた際、
「BGM番号」は担当する大名によって異なります(東北の大名と四国の大名など)。
しかし、シチュエーションは同じなので、「BGMシーン番号」は同じ番号となります。

特定のBGMシーン番号の時だけ、自分が用意したBGMを再生する
String^ 天翔記クラス::On_BGM再生直前(int BGM番号, int BGMシーン番号, String^ 元ファイル名) {

  // 戦略画面で、通常の地方曲が流れているという、シーン番号の時
  // 自分が用意したファイルを再生する。
  if (BGMシーン番号 == 45) {
    return "myBGM2.kvs";
  }

  return "";
}

使用例④

様々な天翔記クラスオブジェクトとの組み合わせにより、
曲をどんどん細かく割り振ることが出来ます。

プレイヤ大名の城の多さに応じて曲を4段階に分ける
String^ 天翔記クラス::On_BGM再生直前(int BGM番号, int BGMシーン番号, String^ 元ファイル名) {

  // 現在プレイヤが担当戦略ターンだ。
  int iDaimyoID = 戦略->ターン->ターン大名番号;
  if (0 <= iDaimyoID && iDaimyoID < 大名->配列->Count) {
    if (大名->配列[iDaimyoID]->Is_プレイヤ担当大名) {

      // 戦略画面の通常の地方曲だ
      if (BGMシーン番号 == 45) {

        // プレイヤ大名の麾下の城リストを得る。
        auto clist = 大名->配列[iDaimyoID]->麾下城番号リスト;

        // 大大名である
        if (clist->Count >= 30) {
          return "BGM_daidaimyo.kvs";
        }
        // 中大名である
        else if (clist->Count >= 8) {
          return "BGM_chudaimyo.kvs";
        }
        // 大名である
        else if (clist->Count >= 2) {
          return "BGM_nrmdaimyo.kvs";
        }
        // 小大名である
        else if (clist->Count == 1) {
          return "BGM_shodaimyo.kvs";
        }
      }
    }
  }

  return "";
}

使用例④

又、BGMは、「音楽->Do_BGM再生」メソッドにより、
好きなタイミングで再生することが出来ますので、再生する際にフラグを立て、
On_BGM再生直前でそれを受けて独自の音楽ファイルを再生することで、
本来の天翔記には存在しない音楽再生タイミングをいくつでも作り出すことが可能です。

好きなタイミングで独自のBGMを再生する
bool BGM送信受信フラグ = false;

String^ 天翔記クラス::On_BGM再生直前(int BGM番号, int BGMシーン番号, String^ 元ファイル名) {
  デバッグ出力 << "BGM番号" << BGM番号 << endl;
  if (BGM送信受信フラグ && BGM番号 == 11) {
    BGM送信受信フラグ = false;

    return "BGM_selfplay.kvs";
  }

  return "";
}


String^ 天翔記クラス::On_噴出メッセージ直前(String^ 元メッセージ, 噴出メッセージパラメタ型^ パラメタ) {
  // 会見のメッセージ。このメッセージが出れば…
  if (元メッセージ->Contains("何をするかは") ) {
    BGM送信受信フラグ = true;
    音楽->Do_BGM再生(11);
  }
  return "";
}

その他

「On_BGM再生直前」イベントハンドラについて、主な解説は以上となります。