我正在为脸书开发一个HTML5游戏。我有以下HTML代码:
<audio style="visibility: hidden;" controls="controls" id="sound-0">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>
<audio style="visibility: hidden;" controls="controls" id="sound-1">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>
<audio style="visibility: hidden;" controls="controls" id="sound-2">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>
<audio style="visibility: hidden;" controls="controls" id="sound-3">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>
<audio style="visibility: hidden;" controls="controls" id="sound-4">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>
<audio style="visibility: hidden;" controls="controls" id="sound-5">
<source src="sound/sound_new.ogg" type="audio/ogg"/>
<source src="sound/sound_new.mp3" type="audio/mp3"/>
</audio>以及以下启动声音的Javascript:
if (this.hitFlag > 6) this.hitFlag = 1;
var soundElem = document.getElementById('sound-' + (this.soundFlag % 6) + '0' );
soundElem.play();每次单击鼠标都会触发声音事件。问题出在Chrome上,在点击了十几次之后,声音就消失了,或者开始播放时有相当大的延迟(十几秒)。但在FF或Opera中播放时没有问题。
发布于 2011-12-23 02:41:51
这肯定是一个bug,但我认为它与实际元素有关,而不是声音播放部分。通过预加载音频,为每次播放声音实例化一个新的音频对象,最后在每个节拍检查声音对象,以确定它们是否已经播放完毕,以便清理内存,可以很容易地解决这个问题。
当然,预加载是这样的:
var _mySnd = new Audio('my/snd/file/is/here.mp3');实例化类似于:
var _sndCollection = [];
var n = _sndCollection.length;
_sndCollection[n] = new Audio();
_sndCollection[n].src = _mySnd.src;
_sndCollection[n].play();而清理检查将是:
for (var i = 0; i < _sndCollection.length; i++)
{
if (_sndCollection[i].currentTime >= _sndCollection[i].duration)
{
_sndCollection.splice(i, 1);
i--;
}
}我在我自己的HTML5游戏引擎中使用了类似的东西,到目前为止它工作得很好。
https://stackoverflow.com/questions/8606393
复制相似问题