我有一个 Canvas 游戏,每次在游戏中执行某项操作以增加得分时,它都会调用函数incScore。
在incScore内部,我有一些if语句来绘制特定的图像,以表示 Canvas 上的级别号。
我还希望每级升级一次声音。每当分数与if语句匹配时,lvlup声音都会播放的方式。
谁能帮我解决这个问题,以便声音只在电平改变时播放一次,而在下一个电平改变时才播放?我还提到我正在使用jQuery,以防它有什么可以帮助我的。
incScore(); //everytime an action in the game causes the score to increase
function incScore(){
if (scoreTotal < 500){
lvlimg = "L01";
drawLevel(lvlimg);
lvlupSound();
}
else if (scoreTotal > 500 && scoreTotal < 1000){
lvlimg = "L02";
drawLevel(lvlimg);
lvlupSound();
}
else{
lvlimg = "L03";
drawLevel(lvlimg);
lvlupSound();
}
}
最佳答案
您可以缩短函数并使用半静态属性保存状态。使用该功能,您可以将当前级别与上一个级别进行比较,并在它们不同时播放声音。
function incScore(){
incScore.level = incScore.level || 'L0'; //< initialize property
lvlimg = "L0" + scoreTotal < 500 ? 1 : scoreTotal < 1000 ? 2 : 3;
drawLevel(lvlimg);
if (incScore.level!=='L0' &&
incScore.level !== lvlimg) { lvlupSound(); };
// ^compare local level to current
incScore.level = lvlimg;
// ^ update local level
}
[根据评论编辑]第三行是所谓的三元运算符或条件运算符。参见MDN。您可以使用更多条件。
为了避免在乐谱达到第一级之前播放声音,您可以使用
if (incScore.level!=='L0' && incScore.level !== lvlimg)
。我创建了一个mockup jsFiddle
关于javascript - 只要变量达到特定值就运行函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14410216/