我目前正在为游戏添加额外的声音。问题是我有一个简写if语句如“?...:...”,并且不知道如何添加音频。如果不可能,我怎么能使它成为正常的if语句而不会使它崩溃。
b.clone().addClass(
b.data("letter") == target.data("letter") ? "wordglow3" : "wordglow").appendTo("table").css({
background: "transparent",
position: "absolute",
top: currentPos.top,
left: currentPos.left
})
所以如果“wordglow3”我想添加“hit.play()”和“wordglow”我想添加“miss.play()”
答案 0 :(得分:1)
好的,首先是使用if / else语句的明显解决方案:
var c = b.clone();
if ( b.data("letter") == target.data("letter") ) {
c.addClass("wordglow3");
hit.play();
} else {
c.addClass("wordglow");
miss.play();
}
c.appendTo(table).css(…);
现在,我们可以使用变量删除一些重复的代码:
var className, sound;
if ( b.data("letter") == target.data("letter") ) {
className = "wordglow3";
sound = hit;
} else {
className = "wordglow";
sound = miss;
}
b.clone().addClass(className).appendTo(table).css(…);
sound.play();
通过使用默认值初始化它们甚至更短:
var className, = "wordglow",
sound = miss;
if ( b.data("letter") == target.data("letter") ) {
className += "";
sound = hit;
}
…
使用三元运算符变得更难。我们可以使用comma operator在同一个表达式中链接不同的动作:
b.clone().addClass( b.data("letter") == target.data("letter")
? hit.play(), "wordglow3"
: miss.play(), "wordglow"
).appendTo(table).css(…);
但这很难看。更好的选择是使用条件变量和两个三元运算符:
var success = b.data("letter") == target.data("letter");
b.clone().addClass(success ? "wordglow3" : "wordglow").appendTo(table).css(…);
(success ? hit : miss).play();
一旦我们到达这里,您甚至可以考虑将声音和类名的额外数据结构添加到replace millions of (especially nested) if-statements with selection by key:
// global:
var sounds = { // or use an arrays
"0": …, // miss
"1": … // hit
};
var classes = {
"0": "wordglow",
"1": "wordglow3"
};
// […]
// then, select values by casting the boolean to numeric keys:
var success = b.data("letter") == target.data("letter");
b.clone().addClass(classes[+success]).appendTo(table).css(…);
sounds[+success].play();
这使得在其他情况下轻松扩展您的应用程序,并且如果在任何地方使用它们,则可以更容易地维护使用过的类名称或声音(在中心位置)。此外,我们已将两个变量hit
和miss
简化为仅一个sounds
。
确定哪种代码段在您的情况下最易读或最合适。
答案 1 :(得分:0)
我的意思是,如果它不是一种速记方式,你可以尝试很长的路:
var class_to_add = "wordglow";
if(b.data("letter") == target.data("letter"))
class_to_add = "wordglow3";
b.clone().addClass(class_to_add).appendTo("table").css({
background: "transparent",
position: "absolute",
top: currentPos.top,
left: currentPos.left
});