Я понимаю, что это может быть распространенным вопросом, однако, посмотрев на другие ответы, я не уверен, что моя реализация выиграет от ответов.
В моей игре игрок стреляет из положения X Y в направлении положения мыши X Y, а враги падают линейно по оси Y.
Однако кажется, что только первый выстрел или случайный выстрел на экране может иногда ударить и убить врага, при этом некоторые пули проходят сквозь прямой удар и не вызывают удаления врага.
игру можно посмотреть здесь:
https://liammorgan.github.io/wave_defence/
И здесь есть фрагмент для обнаружения попадания, который работает примерно в 20% случаев или при первом выстреле пули.
Каждый выстрел имеет X, Y, bulletSpeed, xVelocity, yVelocity
У каждого врага есть X, Y, скорость
shot.js -
this.hit = function() {
for(enemy in enemies) {
let e = enemies[enemy];
if(e != null) {
if(this.x+this.size > e.x && this.x-this.size < e.x &&
this.y+this.size > e.y && this.y-this.size < e.y) {
enemies[enemy] = null;
return true;
} else {
return false;
}
}
}
}
sketch.js -
let shots = [];
let enemies = [];
if(player.lives > 0) {
player.update();
player.draw();
for(shot in shots) {
let s = shots[shot];
if(s != null) {
if(s.hit() && s != null) {
shots[shot] = null;
continue;
}
shots[shot].update();
shots[shot].draw();
if(s.remove() && s != null) {
shots[shot] = null;
}
}
}
}