2017-01-20 6 views
0

Я делаю javascript игру, и я не могу заставить врага умереть, когда попал с пулей. Вот часть кода, который я просто не могу понять:Сделать врага умрет при попадании с пулей

for(var i=0;i<enemies.length;i++){ 
    ctx.fillRect(enemies[i].x,enemies[i].y,30,100); 

    if(player.x+player.width>enemies[i].x && player.x<enemies[i].x+30 && player.y+player.height>enemies[i].y && player.y<enemies[i].y+100){ 
     document.location.reload(); 
    } 


} 

for (var b=0;b<bullets.length;b++){ 
    ctx.beginPath(); 
    ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2); 
    ctx.fill();  
    bullets[b].x += bullets[b].dx; 

    if(bullets[b].x>enemies[i].x && bullets[b].x<enemies[i].x+enemies[i].width && bullets[b].y>enemies[i].y && bullets[b].y<enemies[i].y+enemies[i].height){ 
     enemies.splice(i,1); 
    } 

} 

Так, я знаю, что проблема в том, что он не может прочитать свойство «х» врагов [я], потому что я Ждут» t помещаем его в врагов для цикла, но если я поместил его туда, он не сможет прочитать свойство «x» пуль [b]. Я застрял на этом два дня и искал все, что мог найти, но ничего не нашел. Я был бы признателен за любую помощь ... Заранее спасибо!

+1

Здесь вам понадобятся вложенные петли –

+0

Да, я пробовал это, но когда враг исчезает, я больше не могу стрелять пулями ... – Vuxer

+0

@Vuxer Тогда *, что это ваша настоящая проблема. Вам нужно проверять каждую пулю против каждого врага, и (если нет лучшей структуры данных и алгоритма обнаружения столкновений), такой способ может быть вложенным циклом. – chepner

ответ

1

Что вы хотите, чтобы проверить всех противников на каждую пулю.

Это делается с помощью вложенных циклов:

for (var b=0;b<bullets.length;b++){ 
    ctx.beginPath(); 
    ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2); 
    ctx.fill();  
    bullets[b].x += bullets[b].dx; 
    for (var j=ennemies.length; j-- >0;) { 
     if(bullets[b].x>enemies[j].x && bullets[b].x<enemies[j].x+enemies[j].width && bullets[b].y>enemies[j].y && bullets[b].y<enemies[j].y+enemies[j].height){ 
      enemies.splice(j,1); 
     } 
    } 
} 

Примечание: В этом примере I петли над врагами в обратном порядке для того, чтобы не пропустить ennemy, когда сплайсинга.

+0

Спасибо, но когда я пробую это, враг виден только во время стрельбы пулями ... – Vuxer

+0

@Vuxer Это совершенно другая проблема. BTW обычно проще управлять таким кодом, когда вы отделяете функции, обновляющие данные (включая проверку коллизий), и функции, отображающие данные (рисунок) –

+0

Хорошо, еще раз спасибо. – Vuxer

Смежные вопросы