CreateJS - 在声音注册期间抛出类型无法识别的错误

CreateJS - Type not recognized error thrown during sound registration

我正在尝试通过 SoundJS 声音注册加载声音,但出现以下错误:

createjs.js:15 Uncaught Error: Type not recognized.

我认为 soundjs 库在定位我的文件或文件扩展名方面有问题,但我使用的是 .ogg,它与我见过的所有示例都是内联的。

这是我的代码:

createjs.Sound.alternateExtensions = ["mp3", "ogg"];

createjs.Sound.on("fileload", function(event) {
    console.log(event);
}, this);

for (var i = 0; i < soundManifest.length; i++) {
    soundManifest[i].loaded = false;
    console.log("loading " + soundManifest[i].src);
    createjs.Sound.registerSound(soundManifest[i].src, soundManifest[i].id)
}

soundManifest 是一个对象数组,其中包含一个提供 .ogg 文件路径的源项和一个 ID。我已经对路径名进行了两次和三次检查,所以很确定不是这样。有任何想法吗?我正在 Chrome.

上开发

感谢您发布 github link。这很有帮助。幸运的是,我有一个超级简单的答案。

重命名您在 Main.js 中创建的 "Object" class,您应该可以开始了。

-- 长答案--

我在抛出的错误中设置了一个断点,它表明当 SoundJS 尝试创建 LoadItem 时,它失败了。这是因为它应该 将它接收到的 LoadItem 视为一个对象,但下面的行失败了:

} else if (value instanceof Object && value.src) {
    // This code should be executed
}

起初我以为 SoundJS 中存在一个我们在过去 2 年中以某种方式遗漏的错误,但仔细检查发现您的应用程序中的对象原型被弄乱了。如果您打开 任何 浏览器 window,然后点击控制台,这将 return true:

({}) instanceof Object
// true

然而,虽然 运行 您的应用程序 return 是 false

当我删除除 CreateJS 和 main 之外的所有其他 classes,然后尝试这个时,问题变得很清楚:

new Object();
// Throws an error that includes info about "Victor"

在 main.js 中,您正在定义 "Object" class,它扩展了 CreateJS Shape。它是全局的,因为代码周围没有方法闭包,所以它覆盖了全局对象 class/prototype.


我加入这个解释的原因是因为我无法弄清楚发生了什么,直到我有步骤表明应用程序中的原型被破坏,大部分都是在我明白原因之前写出来的。我认为它可能会引起一些兴趣 :)