我使用HTML5来编写游戏;我现在遇到的障碍是如何播放音效。
具体要求不多:
我的第一个方法是使用HTML5 <audio>
元素并在我的页面中定义所有的声音效果。Firefox播放WAV文件非常好,但多次调用#play
并不能真正多次播放示例。根据我对HTML5规范的理解,<audio>
元素还跟踪播放状态,这就解释了为什么。
我的第一个想法是克隆音频元素,所以我创建了以下小型JavaScript库来为我做这件事(依赖于jQuery):
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
所以现在我可以从Firebug控制台执行Snd.boom();
并播放snd/boom.wav
,但我仍然不能多次播放相同的示例。<audio>
元素似乎更像是一个流特性,而不是用来播放声音效果的东西。
有什么聪明的方法可以做到这一点,最好只使用HTML5和JavaScript?
我还应该提一下,我的测试环境是Ubuntu 9.10上的Firefox 3.5。我尝试过的其他浏览器——Opera、Midori、Chromium、Epiphany——产生了不同的结果。有些不播放任何内容,有些则抛出异常。