2

我正在使用以下代码行。但这似乎是多余的,我很好奇是否有以下优化的替代方案......

if(mkey[65]){ //this is left! (a)
    var nextpos = $("#item").x()-player.speed;
    if(nextpos > 0){
        $("#item").x(nextpos);
    }
}
if(mkey[68]){ //this is right! (d)
    var nextpos = $("#item").x()+player.speed;
    if(nextpos < pg.width - 100){
        $("#item").x(nextpos);
    }
}
if(mkey[87]){ //this is up! (w)
    var nextpos = $("#item").y()-player.speed;
    if(nextpos > 0){
        $("#item").y(nextpos);
    }
}
if(mkey[83]){ //this is down! (s)
    var nextpos = $("#item").y()+player.speed;
    if(nextpos < pg.height - 30){
        $("#item").y(nextpos);
    }
}

我考虑过使用jquery each 方法,但只花了我到目前为止,因为我不知道你是否可以将自定义JavaScript函数存储到数据对象中......

感谢您的任何建议!

这是我尝试过的......(没有运气)

$.each([
    {keypress: mkey[65], item:$("#item").x()-player.speed},
    {keypress: mkey[68], item:$("#item").x()+player.speed},
    {keypress: mkey[87], item:$("#item").y()-player.speed},
    {keypress: mkey[83], item:$("#item").y()+player.speed}
], function(i, obj) {

     if (obj.keypress) {
  if(obj.item > 0) { $("#item").x(obj.item);}
  }

});
4

2 回答 2

2

在 JavaScript 中,函数是一个对象,所以这不是问题。问题是您是否会通过使用一行代码来保存任何代码行,即使您这样做了,它是否可维护。这是一个可能的解决方案:

$.each([
    { which: 65, fn: $('#item').x, plus: -player.speed, comparison: 'gt', what: 0 },
    { which: 68, fn: $('#item').x, plus: player.speed, comparison: 'lt', what: pg.width - 30),
    { which: 87, fn: $('#item').y, plus: -player.speed, comparison: 'gt', what: 0 },
    { which: 83, fn: $('#item').y, plus: player.speed, comparison: 'lt', what: pg.height - 30)
], function () {
    var o = this,
        w = mkey[o.which],
        nextpos = o.fn() + o.plus;
    if ((o.comparison === 'gt' && nextpos > o.what) || 
        (o.comparison === 'lt' && nextpos < o.what)) {
        o.fn(nextpos);
    }
});

我还没有测试过这个或任何东西(用你的代码提供一个jsFiddlejsBin,我可以),但希望你能看到我要去哪里。同样,不确定这是否真的有帮助,因为这段代码的可读性比原始代码要低得多。通过缩小,原始代码将比这段代码运行得更快。祝你好运。

于 2012-08-22T19:30:05.330 回答
1

在键码上使用 switch 语句。

还有which,但我不喜欢它: http ://api.jquery.com/event.which/

切换语句

switch($keycode){

case 43:
// Your code or function_name();
break;

case 99:
// Your code or function_name();
break;
}
于 2012-08-22T19:12:23.587 回答