Closed asmka closed 2 years ago
詳細なご報告ありがとうございます。手元で現象を再現できました。見る限りエンジンの不具合のようです。AudioAsset は、シーンの遷移時に再生中だった場合に破棄を遅延したり、さらに遅延中に改めて必要になったら破棄をキャンセルしたりするのですが、その過程で一部データの整合性が崩れてしまっているようです。
修正を進めますが、暫定的にこのトラブルを回避いただく方法としては、次のどちらかが使えるかと思います:
getAudio()
(パスによる取得) ではなく getAudioById()
(ID による取得) を使う(a) は、 game.json の /assets/audio/se
のアセット宣言に 、次のように "global": true,
という指定を追加して、当該アセットをグローバルアセットにするものです。
{
"中略": "...",
"assets": {
"/assets/audio/se": {
"type": "audio",
"path": "assets/audio/se", // 当該のアセット
"global": true, // ←これを追加
"その他の値": "..."
}
}
}
グローバルアセット はゲーム開始時から (各シーンで指定せずとも) ずっとロードされたままになるアセットです。そのため AudioAsset の破棄 (のキャンセル) に関連する今回のトラブルを回避できます。代償として、不要なシーンでもずっとそのアセットはロードされっぱなしになりますが、.js 側を変更せずに対処できるので暫定対処としてはこれが一番良さそうです。
別の方法としては、(b) getAudioById()
を使う方法があります。確認したところ、 getAudio()
がおかしくなる状況でも、 getAudioById()
は動作するためです。ただ、assets/
ディレクトリに置いた時のアセット ID は不定とさせていただいている
ため、この方法を使うには audio/
ディレクトリにファイルを移動する必要がありますし、また .js 側も変更が必要になります。
丁寧なご回答ありがとうございます。 グローバルアセットについては認識していなかったため大変参考になりました。 お勧めの通り、(a) パターンにて対処しようと思います。
一般ユーザによる問い合わせ先がこちらでなかったらすみません。 掲題は大分かい摘んでいるので以下に詳細を記します。 推奨する対処方法があれば教えていただきたいです。
環境
16.13.1
3.2.2
2.14.29
multi
akashic serve -s nicolive
エラーメッセージ(Chrome)
条件(以下を全て満たす)
再現コード
※
/assets/audio/se
は3秒以上の音声ファイル備考
.stop()
で再生を止めることで対処可能