我制作了这个游戏,你可以从屏幕两侧射击敌人。当子弹到达屏幕的末端时(如果他们没有击中任何敌人)并且在与敌人发生碰撞时移除敌人,我就会让子弹移动并被移除。
//------------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的类,然后进行碰撞检查,这是我认为我有的,但它似乎不起作用。
此外,游戏开始滞后越来越多的时间。有人会知道原因吗?
答案 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
能量。代码也少得多。