Я делаю программу, которая прямо сейчас использует хитбоксы для отслеживания столкновения игрока и объекта, но не может понять, как заставить игрока потерять всего 1 здоровье, когда это происходит.
Еслинеобходимо, чтобы переменная «objects» инициировалась как пустой массив, но объекты добавляются к нему с помощью кнопки.Переменные "objects" и "player" создаются с помощью конструктора Hitbox:
function Hitbox(x, y, w, h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
this.speedX = 0;
this.speedY = 0;
this.gravity = 0.05;
this.gravitySpeed = 0;
this.update = function() {
ctx = area.context;
ctx.strokeRect(this.x, this.y, this.width, this.height);
}
this.newPos = function() {
this.gravitySpeed += this.gravity;
this.x += this.speedX;
this.y += this.speedY + this.gravitySpeed;
this.hitBottom();
this.hitSide();
}
this.hitBottom = function() {
if(this.y > (ground - this.height)) {
this.y = (ground - this.height);
}
}
this.hitSide = function() {
if(this.x < 0) {
this.x = 0;
}else if(this.x > window.innerWidth - this.width) {
this.x = window.innerWidth - this.width;
}
}
this.crashWith = function(otherobj) {
var myleft = this.x;
var myright = this.x + (this.width);
var mytop = this.y;
var mybottom = this.y + (this.height);
var otherleft = otherobj.x;
var otherright = otherobj.x + (otherobj.width);
var othertop = otherobj.y;
var otherbottom = otherobj.y + (otherobj.height);
var crash = true;
if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) {
crash = false;
}
return crash;
}
}
В функции updateArea (), которая выполняется для каждого интервала, я создал цикл for, который проходит через все текущие объекты в переменной "objects" и проверяет ихстолкновение с игроком.
for(var i = 0; i < objects.length; i++) {
if(player.crashWith(objects[i])) {
health--;
}
}
Если это правда, здоровье игрока, отображаемое над хитбоксом игрока, ДОЛЖНО уменьшаться на 1. ВМЕСТО, оно мгновенно истощает все здоровье, даже если этооператор if, а не оператор while.
Можно ли использовать этот метод для уменьшения переменной "health" на 1 или мне следует использовать другой способ полностью?