我有一个数组,里面有16个错误的布尔值。
var arr = [];
for(let i=0;i<15;i++){
arr.push(false);
}
我正在将[0] [4] [8] [12]的布尔值设置为true。
arr[0]=true;
arr[4]=true;
arr[8]=true;
arr[12]=true;
我还有一个playSound函数,可以使用WebAudio API创建和播放声音。
function playSound(){
var oscillator = audio.createOscillator();
oscillator.type = 'sine';
oscillator.frequency.value = 440;
oscillator.connect(audio.destination);
oscillator.start(audio.currentTime);
oscillator.stop(audio.currentTime+0.5);
}
我希望我的“播放”功能每500毫秒检查一次数组给定索引中是否为真,然后使用playSound函数播放声音。
var index = 0;
function play(){
setInterval(function() {
if(arr[index]===true){
playSound;
index++ % arr.length; ;
}
},500)}
但是它似乎不起作用。怎么了?
答案 0 :(得分:0)
var index = 0;
function play(){
setInterval(function() {
if(arr[index]===true){
playSound();
index++ ;
}
},500)}
我认为您忘记了括号()
来调用该方法。
答案 1 :(得分:0)
许多人提到在致电()
时忘记了括号playSound
...
但是,您也只在index
时增加arr[index]===true
变量,这可能不是您想要的。考虑您的初始设置:
arr
看起来像这样:[true, false, false, false, true, ...]
index
设置为0
调用函数play()
时,间隔开始计时,因此每500毫秒运行一次。第一次运行时,它会检查arr[index]===true
(同样,index
从0
开始)。 arr[0]
为true
,因此条件通过,因此调用playSound()
并将index
增至1。
在下一个周期,将再次检查arr[index]===true
,但是这次index
是1
,而arr[1]
是false
,因此条件不成立AND index
不递增。因此,从现在开始将经过500毫秒,将调用相同的条件arr[index]===true
,但是index
将永远不会递增(因为index++
中的if-condition
行)。
所以您的问题似乎是:
playSound
需要带括号-> playSound()
index++
必须放在if-statement
函数内部setInterval
之后,如下所示:将play
函数更改为如下形式:
function play() {
setInterval(function() {
if (arr[index]===true) {
playSound();
}
index++ % arr.length;
}, 500)
}