Autor Zpráva
smala
Profil *
Zdravim,

mam element <audio>, ve kterem se pri nejake akci prehraje zvuk.. ja bych potrebval aby se ten zvuk prehral pokazde kdyz se ta akce vyvova, tedy i v pripade ze zvuk jeste hraje z predchozi akce

PR: chci simulovat zvuk vystrelu pri stisknuti tlacitka

<button onclick="document.getElementById("audioShoot").play();">Vystrel</button>
<audio id="audioShoot" src="ShotGunFire.wav"></audio>
takhle to funguje, ze zvuk se vyvola az kdyz uz nehraje, tedy pokud zmacku rychle za sebou tlacitko, zvuk vystrelu je slyset jednou a ne 2x

Dekuji za pomoc
peta
Profil
smala:
Tak si udelej casovac, ktery zjistuje, zda zvuk hraje. Pokud ano, onclick pricte do promenne +1. Casovac pak po skonceni zvuku spusti zvuk znova a soucasne z promenne odecte -1. Priklady na setTimeOut si budes muset nejspis vygooglovat, jpw je na tohle dost strohe.
JavaScript -- příklady » Datum, čas a časování
Mozna daleko lepsi by bylo spustit ten druhy zvuk hned ve zvlast elementu nez cekat na skonceni. Ono se muze stat, ze kliknes, nic se nedeje a pak vystreli uz po udalosti.
smala
Profil *
casovac urcite neni reseni.. dat to do vice elementu me taky napadlo, ale nezda se mi to moc elegantni, ale asi nic jinyho nezbyde.. prave me zajimalo, jestli se neda resit vicenasobnym zpoustenim toho sameho elementu

ale diky za rady ;-)
1Pupik1989
Profil
Ne, je to naprosto jednoduché, ale chvilku jsem taky tápal, když jsem psal KillyKitty :D

<button onclick="shoot();">Vystrel</button>
<script type="text/javascript">
function shoot(){
  MyAudio = new Audio("jmeno_souboru.koncovka");
  MyAudio.play();
}
</script>
Chamurappi
Profil
Reaguji na 1Pupika1989:
MyAudio.play();
Co když ještě není načtený?

Podle mých zkušeností je jedinou prakticky použitelnou možností pro okamžité přehrání naládovat celý zvuk přes data: adresu.
1Pupik1989
Profil
No doba od kliknutí po přehrání není ani sekundu, takže se to dá snést. Pro hry typu Moorhuhn to stačí. Kontrolovat zda-li je soubor načtený u takto malých souborů asi ani nemá smysl.
Chamurappi
Profil
Reaguji na 1Pupika1989:
Nevím, jaká je situace u současných prohlížečů, ale když jsem to řešil před rokem, tak vyrobení zvuku následované okamžitým voláním play fungovalo velmi nespolehlivě. Nehledě na velikost.
_es
Profil
1Pupik1989:
No doba od kliknutí po přehrání není ani sekundu, takže se to dá snést.
Snáď to bude aj nejako závislé od oneskorenia a rýchlosti pripojenia.

Kontrolovat zda-li je soubor načtený u takto malých souborů asi ani nemá smysl.
Môže predsa nastať chyba a pod. Netreba niečo kontrolovať, stačí vhodne využiť udalosti (http://www.w3.org/TR/html5/media-elements.html#handler-mediacontroller-oncanplaythrough) a načítať súbor vopred.
1Pupik1989
Profil
_es:

Na načtení souboru dopředu tam není čas. Jedině soubor cachovat. Jeden zvuk nejde spustit vícekrát. Tohle spočívá v tom, že se ten samý soubor (proměnná) nadefinuje znovu a přehraje. Pokud teda chápu dobře co si myslel.
_es
Profil
1Pupik1989:
Na načtení souboru dopředu tam není čas.
Akože „nie je čas“? Veď hra má len obmedzené množstvo zvukov, tak čo bráni tomu, načítať ich vopred pred spustením hry?

Jeden zvuk nejde spustit vícekrát.
A to už prečo? Veď metódu play je možné zavolať hocikoľko krát.

Tohle spočívá v tom, že se ten samý soubor (proměnná) nadefinuje znovu a přehraje.
To je predsa veľmi nevhodný spôsob.
smala
Profil *
1Pupik1989:
<button onclick="shoot();">Vystrel</button> <script type="text/javascript"> function shoot(){ MyAudio = new Audio("jmeno_souboru.koncovka"); MyAudio.play(); } </script>

diky, tohle funguje, ale taky si myslim, ze to trochu problem s tim neustalim nacitanim souboru, jednoho a toho sameho porad dokola a trochu spozdeni tam je, nez se to nacte..

nicmene, diky i za toho...

zatim asi nejlepsi, avsak celkem neelegantim zpusobem reseni, bylo nacist zvuky do vice elementu <audio> a to tolik kolik jich maximalne za sebou mohlo prijit a zpoustet je jednolive po pozadovanem case nebo udalosti..

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0