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 回答