我正在使用HTML5编写游戏程序;我现在遇到的障碍是如何播放音效。
具体要求在数量上是很少的:
我的第一种方法是使用HTML5 <audio>
元素并在页面中定义所有声音效果。火狐对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上的Firefox3.5。我尝试过的其他浏览器-- Opera、Midori、Chromium、Epiphany --都产生了不同的结果。有些什么都不玩,有些则抛出异常。
https://stackoverflow.com/questions/1933969
复制相似问题