2011-07-31 39 views
14

我正在构建一个wav文件在点击播放的游戏 - 在这种情况下,它是枪声“爆炸”。HTML5音频 - 点击播放声音,无论先前的迭代已完成

问题是,如果我快速点击,每次点击都不会播放一次声音 - 就好像点击在播放声音时被忽略一样,一旦声音播放完毕,它就会再次聆听点击。延迟似乎是大约一秒钟长,这样算起来,如果有人点击每秒4或5倍,我想5个刘海,而不是1

这里是我的HTML:

<audio id="gun_sound" preload> 
    <source src="http://www.seancannon.com/_test/audio/gun_bang.wav" /> 
</audio> 

这里是我的JS:

$('#' + CANVAS_ID).bind(_click, function() { 
    document.getElementById('gun_sound').play(); 
    adj_game_data(GAME_DATA_AMMO_ID, -1); 
    check_ammo(); 
}); 

想法?

回答

15

预加载gun_bang.wav后,您可以动态制作附加了该声音的新元素,播放音频,然后在音频结束时将其删除。

function gun_bang(){ 
     var audio = document.createElement("audio"); 
     audio.src = "http://www.seancannon.com/_test/audio/gun_bang.wav"; 
     audio.addEventListener("ended", function() { 
      document.removeChild(this); 
     }, false); 
     audio.play(); 
    } 

    $('#' + CANVAS_ID).bind(_click, function() { 
     gun_bang(); 
     adj_game_data(GAME_DATA_AMMO_ID, -1); 
     check_ammo(); 
    }); 
+0

这看起来很有希望。我唯一的担心是在创建元素时,点击和音频之间会存在延迟。我还需要我的初始'audio'标签吗?我假设它是如何预装的? – AlienWebguy

+0

哈哈所有的担心都被揭穿,谢谢!现在,何时JQuery将开始支持这些功能,以便我可以执行'$('selector')。play()'和whatnot? – AlienWebguy

+1

这是一个矫枉过正。只需将'currentTime'设置为'0':http://stackoverflow.com/a/7005562/352796 – katspaugh

11

我知道这是一个非常晚的答案,我只是想,而是寻求一个解决方案,我发现,在我的情况下,最好的一次是预加载的声音,然后我要玩,每次克隆节点它,这让我连打它,如果以前还没有结束:

var sound = new Audio("click.mp3"); 
sound.preload = 'auto'; 
sound.load(); 

function playSound(volume) { 
    var click=sound.cloneNode(); 
    click.volume=volume; 
    click.play(); 
} 
+0

哇谢谢,我的玩法根本不起作用,这固定了它。 – 2012-10-16 15:53:55

+0

这太好了。反正有做同样的事情,但使用多个MP3的? – gravityboy

+0

@jmservera这很不错,但是每次新点击添加的HTTP请求:( –

1

你可以用你自己的特定程序,点击逻辑以下,但下面演示了3枪在同一时间响起。如果你想要任何延迟,你可以引入一个小的sleep()函数(很容易找到这个函数的很多kludge攻击),或者你可以使用setTimeout()来调用后续的函数。

<audio id="gun_sound" preload="preload"> 
    <source src="http://www.seancannon.com/_test/audio/gun_bang.wav" /> 
</audio> 

<script type="text/javascript"> 
jQuery(document).ready(function($){ 

    $('#gun_sound').clone()[0].play(); 
    $('#gun_sound').clone()[0].play(); 
    $('#gun_sound').clone()[0].play(); 

}); 
</script> 
+0

'preload =“preload”'在点击HTML5中的播放按钮之前加载音频? –