Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用电容器为iOS构建时,Phaser 3应用程序中没有声音_Javascript_Ios_Typescript_Phaser Framework_Capacitor - Fatal编程技术网

Javascript 使用电容器为iOS构建时,Phaser 3应用程序中没有声音

Javascript 使用电容器为iOS构建时,Phaser 3应用程序中没有声音,javascript,ios,typescript,phaser-framework,capacitor,Javascript,Ios,Typescript,Phaser Framework,Capacitor,我已经创建了一个简单的测试应用程序(在Typescript中,使用rollup来传输),并正在使用它将其转换为Mac上的iOS应用程序 这是应用程序的相关部分: function preload () { this.load.audio('boom', ['boom.mp3', 'boom.ogg', './boom-44100.ogg', './boom-44100.mp3']); this.load.image('wizball', './wizball.png'); }

我已经创建了一个简单的测试应用程序(在Typescript中,使用
rollup
来传输),并正在使用它将其转换为Mac上的iOS应用程序

这是应用程序的相关部分:

function preload () {
    this.load.audio('boom', ['boom.mp3', 'boom.ogg', './boom-44100.ogg', './boom-44100.mp3']);
    this.load.image('wizball', './wizball.png');
}

function create () {
    const image = this.add.image(400, 300, 'wizball').setInteractive();;
    this.boom = this.sound.add('boom');
    image.on('pointerup', () => {
        this.boom.play();
    });
}
该应用程序会显示一张照片,如果你点击它,你会听到“砰”的一声

当我运行它时:

  • 使用
    npm运行监视
    ,使用http://localhost:10001 在Mac上的浏览器中,它工作正常
  • 在我的Mac电脑上,通过在浏览器的
    dist/
    dir中加载
    index.html
    ,它可以正常工作
  • 通过在我的Mac或iPad上加载,它可以正常工作
  • 但是,当我使用电容器在Xcode中构建iOS应用程序时,点击图像根本不会发出声音
以下是生成iOS应用程序的步骤:

npm i
npm run watch
npx cap add ios
npx cap copy ios
npx cap open ios
Xcode中的控制台日志显示以下错误:

Error: There is no audio asset with key "boom" in the audio cache
⚡️  URL: capacitor://localhost/game.js
我觉得这很奇怪,因为可以很好地找到图像资产。在
ios/App/public/
dir中,同时存在
boom.mp3
wizball.png

我把完整的代码和复制的步骤放在这里:你需要安装node 10+和Xcode(至少配置了一个虚拟设备)来构建iOS应用程序


我忽略了什么?

在游戏配置中禁用网络音频,添加到游戏配置的底部,如下所示

let game = new Phaser.Game({
  ...
  audio: {
    disableWebAudio: true
  }
});
警告:

  • 禁用web音频将使phaser使用html5音频
  • 使用html5音频 而不是网络音频将使您的游戏滞后
此问题的另一个解决方法是:

  • 使用外部音频文件,如果您使用 音频文件不是来自内部资产的(我仍然无法找到原因)
  • 使用本机音频/媒体插件为移相器电容器应用程序播放音频

  • 我也有同样的问题。我发现只有在ios平台上,phaser loader才能解析声音负载上的ArrayBuffer。这就是为什么我用简单的fetch加载音频,并用scene.sound.decodeAudio添加到phaser。 诸如此类:

    fetch(sound.url)
      .then((response) => response.arrayBuffer())
      .then((response) => {
        scene.sound.decodeAudio({
          data: response,
          key: 'audioKey',
        });
      });
    

    有意思,你介意分享你的客户加载器吗?添加到原始答案中非常感谢!您是否为此创建了自定义多文件加载程序,该加载程序可以在预加载期间作为正常过程的一部分运行?