更有效的方法是检查是否设置了变量,然后设置它,或者只是不断地设置它

More efficient to check if a variable is set, then set it, or just constantly set it?

本文关键字:设置 然后 或者 有效 方法 检查 是否 变量      更新时间:2023-09-26

制作游戏…这样做更有效率吗?

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];
});

"我们应该忘记小的效率,大约97%的时间:过早的优化是所有罪恶的根源。"

<一口> http://c2.com/cgi/wiki?PrematureOptimization <子>

这两种方法具有相同的复杂性,设置'更改四个字符的变量不会成为应用程序中的瓶颈。

我在这里关心的唯一的事情是你的代码的可读性,如果任何一种方式你想要sprite.state有值left为什么你需要检查什么是以前的值?
(哦,它节省了大约20比特的带宽,就像这里的性能增益一样…)

这样不是比遍历键要快得多吗?您可以非常快速地连续检查变量。

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的情况下做事情