制作游戏......更高效地执行此操作?
if (37 in keysDown) { //left arrow
if (sprite.state != 'left') sprite.state = 'left';
}
还是这个?
if (37 in keysDown) { //left arrow
sprite.state = 'left';
}
这在我的游戏更新功能中被调用(不断地,尽可能快地)。
旁注: 这是我的输入密钥检查代码。
//input
var keysDown = {};
window.addEventListener('keydown', function(e) {
keysDown[e.keyCode] = true;
});
window.addEventListener('keyup', function(e) {
delete keysDown[e.keyCode];
});
答案 0 :(得分:4)
“我们应该忘记小的效率,大约97%的时间说:过早优化是所有邪恶的根源 。”
http://c2.com/cgi/wiki?PrematureOptimization <子> 子>
这两种方式具有相同的复杂性,设置\更改四个字符变量将不会成为您应用中的瓶颈。
我唯一关心的是代码的可读性,如果您希望sprite.state
的任何一种方式具有值left
,为什么需要检查以前的值是什么?<登记/>
(哦,它可以节省20比特的带宽,就像这里的性能提升一样......)
答案 1 :(得分:0)
这样的东西不会比循环键快得多吗?您可以非常快速地连续检查变量。
var keyleft=false;
window.onkeydown = keydown;
window.onkeyup = keyup;
function keydown(event)
{
var keyCode = ('which' in event) ? event.which : event.keyCode;
if (keyCode==37) keyleft=true;
}
function keyup(event)
{
var keyCode = ('which' in event) ? event.which : event.keyCode;
if (keyCode==37) keyleft=false;
}
不保证这段代码能够正常工作,我忘记了如何在没有jQuery的情况下做事。