尝试在Phaser中加载.mp3文件时出现异常



我正试图在preload()函数中加载一个非常短的.mp3文件,如下所示:

game.load.audio('sword', '$assetPath/swordraw.mp3', true);

一旦执行此代码,它就会崩溃,并显示错误

Breaking on exception: Invalid arguments(s)

指向Phaser的LoaderfileError函数中的console.warn,如下所示:

fileError(int index) {
  this._fileList[index]['loaded'] = true;
  this._fileList[index]['error'] = true;
  this.onFileError.dispatch([this._fileList[index]['key'], this._fileList[index]]);
  window.console.warn("Phaser.Loader error loading file: " 
  + this._fileList[index]['key'] + ' from URL ' + this._fileList[index]['url']);
    this.nextFile(index, false);
}

通过DartEditor的调试器,我看到由于某种原因,_fileList[10]['url'](音频文件的URL)在这里被选为null,这就是异常的原因(无法将.null连接到字符串),但为什么URL为null?

我已经检查了明显的问题:文件名是正确的,assetPath肯定初始化正确,因为在此加载之前的所有其他文件(都是图像)都很好。所以这看起来像是某种音频文件问题,但我看不出问题是什么。

哦,好像我在这里找到了罪犯。。。https://github.com/playif/play_phaser/blob/ae6a08e5a6eb159149fac01e5831fd8572223a44/lib/loader/loader.dart#L1447

Loader设置关于新添加的文件的内容时,如果该文件是音频文件,它将调用此getAudioUrl。。。

getAudioURL(urls) {
//String extension;
if (urls is String) {
  urls = [urls];
}
for (var i = 0; i < urls.length; i++) {
  var url = urls[i];
  //extension = urls[i].toLowerCase();
  //extension = extension.substr((Math.max(0, extension.lastIndexOf(".")) || Infinity) + 1);
  if (this.game.device.canPlayAudio(url.split('.').last)) {
    //return urls[i];
    return url;
  }
}
return null;

}

从上面可以看出,如果设备无法播放所提供的文件类型,则该方法似乎会返回null。那Dartium就不能玩.mp3s了?

最新更新