0

http://jsfiddle.net/5DB6K/

画面の横から敵を撃つゲームを作っています。弾丸が移動し、画面の端に到達すると (敵に当たらなかった場合) 取り除かれ、敵に衝突すると敵が取り除かれます。

//------------collision----------------//
        if(shot === true){

            bulletY = $('.bullet').position().top + 2;
            bulletX = $('.bullet').position().left + 2;

            $('.enemy').each(function(){

                if($('.enemy').hasClass('smallEnemy')){
                enemyY = $(this).position().top + 7;
                enemyX = $(this).position().left + 7;

                if(Math.abs(bulletY - enemyY) <= 9 && Math.abs(bulletX - enemyX) <=9){

                    $(this).remove();
                    score = score + 40;
                    bulletDestroy();

                }
              }

           });
        }

ただし、衝突チェックが正しい場合、弾丸はすべての敵を破壊します。これは私が望んでいるものではありません。敵が smallEnemy、medEnemy、または lrgEnemy のいずれかのクラスを持っているかどうかを確認してから、私が持っていると思っていた衝突チェックを実行したいのですが、うまくいかないようです。

また、ゲームは時間が経つにつれて遅れ始めます。誰かがその理由を知っていますか?

4

1 に答える 1

0

これにより、条件により、小さな敵が存在するときはいつでもすべての敵が削除されます.each。これを試して:

if($(this).hasClass('smallEnemy')){
            enemyY = $(this).position().top + 7;
            enemyX = $(this).position().left + 7;

            if(Math.abs(bulletY - enemyY) <= 9 && Math.abs(bulletX - enemyX) <=9){

                $(this).remove();
                score = score + 40;
                bulletDestroy();

            }

遅延に関しては、メモリの可用性とオーバーヘッドが原因です。「敵」をループする代わりに、弾丸にオブザーバーをアタッチし、弾丸と交差するたびに.enemyカスタム イベントを発生させて敵を除去しthisます。コードもはるかに少なくなります。

于 2012-12-11T05:00:37.913 に答える