我正在创建一个有趣的画布游戏,我正在尝试重新考虑我的多个其他if语句,以改为使用对象查找表。
这是我在keydown上分配变量值的当前代码:
function keyDown(e) {
keypressed = true;
if (e.keyCode == 39 || e.keyCode == 68) {rightKey = true; }
else if (e.keyCode == 37 || e.keyCode == 65) {leftKey = true;}
else if (e.keyCode == 38 || e.keyCode == 87) {upKey = true; }
else if (e.keyCode == 40 || e.keyCode == 83) {downKey = true; }
else if (e.keyCode == 80) { isPaused = !isPaused; document.body.classList.toggle('pause'); }
if (e.keyCode === 69) { startHit(); }
}
我想分配wsad键和箭头键来做同样的事情,因此使用||在if条件下。
我读到使用对象文字查找表是实现此目的的更快方法,这是我的尝试:
var codes = {
39 : function() {
return rightKey = true;
},
37 : function() {
return leftKey = true;
},
38 : function() {
return upKey = true;
},
40 : function() {
return downKey = true;
},
80 : function() {
isPaued = !isPaused;
document.body.classList.toggle('pause');
},
69 : startHit
}
codes[68] = codes[39];
codes[65] = codes[37];
codes[87] = codes[38];
codes[83] = codes[40];
function keyDown(e) {
keypressed = true;
codes[e.keyCode]();
}
这很好用,但我不确定底键的分配是最好的方法吗?我显然不能使用||左手操作中的操作符,那么是否有更简洁的方法可以执行此操作,还是应该坚持使用else ifs?
另外,我知道我可以使用switch语句,但我觉得它看起来与我上面的方式类似。
任何建议都会很棒。感谢。
答案 0 :(得分:1)
这是怎么回事?
node* mergeLeft(node* left, node* ptr) {
left->size += ptr->size;
return left;
}
node* mergeRight(node* right, node* ptr) {
ptr->size += right->size;
return ptr;
}
答案 1 :(得分:1)
为什么不使用switch
声明?
function keyDown(e) {
keypressed = true;
switch (e.keyCode) {
case 39:
case 68:
rightKey = true;
break;
case 37:
case 65:
leftKey = true;
break;
case 38:
case 87:
upKey = true;
break;
case 40:
case 83:
downKey = true;
break;
case 80:
isPaused = !isPaused;
document.body.classList.toggle('pause');
break;
case 69:
startHit();
}
}