我最近开始学习Javascript,并且正在开发我的第一个网络嵌入式游戏,该游戏是一款音乐益智游戏,它使用十二音序贯音乐的基本原理。我的游戏大部分都已完成,您可以在这里找到它。但是我在音频方面遇到了麻烦。当用户解决难题时,我确实设法使它播放声音,但我无法真正通过游戏板上显示的音符来播放声音。
这是我做的事情:我创建了一个包含12个音频对象的数组,其中包含从C到B的每个音符。然后,我创建了一个名为“ playToneRow()”的方法,该方法将它们全部播放,并由数字数组ToneRow确定顺序。笔记[]。这是代码:
this.playToneRow = function()
{
for (var i in this.notes)
{
noteSound[this.notes[i]].play();
}
};
但是此方法只播放音调行的最后一个音符。现在,我应该提到的是,我在网上找到的各种教程将我对Javascript的知识汇集在一起,我可以肯定的是,我公认的基本编码技能存在很大差距。但是我发现问题在于我在声音之间没有留任何空间,因此它试图同时播放所有声音,但是它没有足够的通道,因此只能播放最后一个。所以我尝试了这个:
this.playToneRow = function()
{
var x = 0;
for (var i in this.notes)
{
x = this.notes[i];
setTimeout(function()
{
noteSound[x].play();
}, 700);
}
};
现在我真的不确定我是否正确使用了setTimeout(),但是我猜不是,因为它再次只播放了最后一个音符。我知道所有12个wav文件都将被加载,因为如果更改音色行,它将演奏不同的音符。因此,它确实可以访问所有音频文件。只是让它可以全部播放(并按正确的顺序)即可。
谢谢!
for
不会真的在乎您setTimeout
,请尝试:
this.playToneRow = function()
{
var x = 0,
length = 0,
j = 0;
for (var i in this.notes)
{
length += 1;
}
function runIteration () {
x = this.notes[j];
setTimeout(function()
{
noteSound[x].play();
}, 700);
if (j === length) return;
j += 1;
setTimeout(runIteration, 700);
}
runIteration();
};
希望能做到。我看过您的代码,但是它有点复杂,所以我无法确定this.notes
是对象还是数组
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句