1

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

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

2 回答 2

4

我们应该忘记小的效率,大约 97% 的时间说:过早的优化是万恶之源。”

http://c2.com/cgi/wiki?PrematureOptimization

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

我在这里唯一关心的是您的代码的可读性,如果您想要sprite.state获得该值left,为什么需要检查以前的值是什么?
(哦,它节省了大约 20 位的带宽,这就像这里的性能提升......)

于 2012-12-27T00:52:47.270 回答
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 的情况下做事

于 2012-12-27T00:55:20.420 回答