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を使用することを考えましたが、カスタム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 では、関数はオブジェクトなので、それは問題ではありません。問題は、1 つのコードを使用してコード行を節約できるかどうか、節約できたとしても保守可能かどうかです。考えられる解決策は次のとおりです。

$.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);
    }
});

私はこれも何もテストしていません (あなたのコードにjsFiddleまたはjsBinを提供してください)。繰り返しますが、このコードは元のコードよりもはるかに読みにくいため、これが実際に役立つかどうかはわかりません. 縮小すると、元のコードはこのコードよりもはるかに高速に実行されます。幸運を。

于 2012-08-22T19:30:05.330 に答える
1

キーコードで switch ステートメントを使用します。

which もありますが、私はそれのファンではありません: http://api.jquery.com/event.which/

Switch ステートメント

switch($keycode){

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

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