我试图通过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链接。这很有帮助。幸运的是,我为您提供了一个非常简单的答案。

重命名在Main.js中创建的“ Object”类,您应该一切顺利。

-长答案-

我把断点扔给了断点,它表明当SoundJS尝试创建LoadItem时,它失败了。这是因为它应该将接收到的LoadItem视为对象,但是下面的行失败了:

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


起初我以为SoundJS中存在一个错误,在过去的两年中我们还是有所遗漏,但是仔细检查发现您的应用程序中的对象原型被弄乱了。如果打开任何浏览器窗口,然后单击控制台,则将返回true

({}) instanceof Object
// true


但是,在运行您的应用程序时,它将返回false

当我删除除CreateJS和main以外的所有其他类,然后尝试执行以下操作时,问题变得很明显:

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


在main.js中,您定义了一个“对象”类,该类扩展了CreateJS Shape。它是全局的,因为代码周围没有方法闭包,因此它会覆盖全局的Object类/原型。



我之所以包含此解释,是因为直到我有步骤证明应用程序中的原型已被破坏,而且大部分原因是在我意识到这一点之前,我才弄清楚发生了什么。我认为这可能会引起一些兴趣:)

09-25 18:44