如何确定哪个敌人被击中并单独摧毁它

时间:2012-12-11 04:50:30

标签: javascript jquery

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();

                }
              }

           });
        }

然而,如果碰撞检查是正确的,那么子弹会摧毁每一个敌人,这不是我想要的。我想检查敌人是否有小型敌人,medEnemy或lrgEnemy的类,然后进行碰撞检查,这是我认为我有的,但它似乎不起作用。

此外,游戏开始滞后越来越多的时间。有人会知道原因吗?

1 个答案:

答案 0 :(得分: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能量。代码也少得多。