我在我的项目中使用[电子邮件受保护]并且我在 Safari 13.1 上玩游戏时遇到问题。
在我的预加载方法中,我有带有声音数据的 loadConfig 对象:
var data = {
mediaURL: "../../../static/sound/",
dataObjects: [
{ type: "sound", name: "ok", file: "ok.ogg" },
{ type: "sound", name: "wrong", file: "wrong.ogg" },
{ type: "sound", name: "missing", file: "missing.png" },
],
};
loadData(data, this);
辅助功能:
function loadData(data, game) {
data.loadObjects.forEach((element) => {
game.load.audio(element.name, config.mediaURL + element.file);
}
}
在我的创建方法中:
this.sound.add("ok")
When I load the scene I get:
Error: There is no audio asset with key “ok” in the audio cache
initialize — phaser.min.js
add — phaser.min.js
create — culture.js
create — phaser.min.js
在其他浏览器上一切正常,我对此没有任何问题。
**: this.sound.add("ok")
这不起作用,我在游戏场景条目/数据中拥有文件等的所有路径。但似乎没有添加到创建方法中 - 仅在 safari 中。
Safari 不支持 Ogg Vorbis。
解决方案:需要为 Safari 提供 .mp3 格式的替代方案。 Safari 无法处理 .oog 文件。
正如其他人所说,Safari 不支持 .ogg 格式 - https://caniuse.com/ogg-vorbis
所以你应该根据你的研究创建一个扩展名为 mp3、m4a 或其他名称的替代声音(我个人使用 m4a)。
为了加载 2 个声音,其中一个作为备份,在 Phaser 中执行如下操作:
scene.load.audio("ok", ["ok.ogg", "ok.m4a"]);
可以用同一个按键加载一系列声音,成功的声音就会播放。 https://rexrainbow.github.io/phaser3-rex-notes/docs/site/audio/#load-audio-file
尽管您需要稍微更改一下
loadData()
函数以匹配文件数组。
这是一个难以调试的疯狂错误。我只在 Safari 的控制台
TypeError: undefined is not an object (evaluating 'emitter._events[evt]')
中看到过很多与我的声音播放的类相关的不直观的错误,并且它破坏了游戏而不是以某种方式处理错误以保持游戏在没有声音的情况下运行。对于 .wave 文件也是如此,太疯狂了。
我查看了我的旧游戏,发现我使用了 2 种格式:数组中的
.ogg
和 .mp3
,就像这样 this.load.audio("wind", ["assets/audio/wind.mp3", "assets/audio/wind.ogg"]);
并且它有效!