2011-07-31 29 views
14

Bir wav dosyasının tıklamayla oynatıldığı bir oyun yapıyorum - bu durumda bir silah sesi "bang".HTML5 ses çalma sesi, önceki yineleme bittiyse de, tıklama üzerine art arda çalma

Sorun şu ki, hızlı tıklatırsam, her tıklama için sesi bir kez oynatmaz - sanki ses çalarken tıklamalar yok sayılır ve ses bittiğinde, tekrar tıklamaya başlar. .

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

benim JS var: Birisi saniyede 4 veya 5 kez tıklarsa, ben 5 patlama değil, 1.

istiyorum İşte benim HTML var gecikmesi uzun yaklaşık bir saniye gibi görünüyor, bu yüzden anlamaya:

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

Fikirler?

cevap

15

gun_bang.wav önceden yüklendikten sonra, bu sesle birlikte yeni bir öğe oluşturabilir, sesi çalabilir ve ardından ses bittiğinde bunları çıkarabilirsiniz. Bence bu çok geç bir cevap olduğunu biliyorum

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

Bu umut verici görünüyor. Tek korkum, öğe oluşturulurken tıklama ile ses arasında gecikme olacağıdır. İlk 'ses 'etiketine hala ihtiyacım var mı? Sanırım önceden yüklenmiş mi? – AlienWebguy

+0

Hah tüm korkuları mahvetti, teşekkürler! Şimdi JQuery bu işlevleri desteklemeye ne zaman başlayacaktır ki ben de '$ (' selector ') oynayabilirim (play -) 've whatnot? – AlienWebguy

+1

Bu bir aşırı sıkma. Sadece "currentTime" öğesini "0" olarak ayarlayın: http://stackoverflow.com/a/7005562/352796 – katspaugh

11

, ben sadece benim durumda en iyi bir ses önceden yüklemek ve düğüm oynamak istiyorum her zaman klonlamak için olduğunu istedi ama buldum çözüm arayan

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

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

Vay canına, benimki hiç oynamadı, bu düzeltildi. –

+0

Bu harika. Yine de aynı şeyi yapmak için var mı ama birden fazla mp3 kullanıyor? – gravityboy

+0

@jmservera Bu güzel, ama her yeni tıklama eklentisi bir HTTP isteği :( –

1

kendi programa özel tıklama mantığı ile aşağıdaki sarın, ancak şu 3 tabanca aynı anda sesler gösterir: o, bu, daha önceki sona ermediğini, bana bile oynamak için izin verir. Herhangi bir gecikme istiyorsanız, küçük bir uyku() fonksiyonu tanıtabilirsiniz (bunun için birçok kludge hack kolayca bulunabilir) veya sonrakileri aramak için setTimeout() kullanabilirsiniz.

<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'te oynat düğmesine tıklamadan önce sesi yükle? –