Программирование с объектами
Хорошо, я вижу вашу близость к цели с обнаружением столкновений и методами, которые вы используете.
Есть некоторые проблемы с кодом, и вы должны их исправить.
Но у меня есть несколько указателей для вас.
Водяные плитки
В вашем коде:
if (player.xPos < water1.x + water1.width &&
player.xPos + player.width > water1.x &&
player.yPos < water1.y + water1.height &&
player.height + player.yPos > water1.y) {
thirst();
return;
}
Это повторяется несколько раз.Старайтесь не повторять один и тот же код снова и снова.
Вы можете легко изменить его на функцию, которую можно вызывать несколько раз.
Вот пример:
function hit( tile) {
//Hits on x axis
if(player.xPos < tile.x + tile.width && player.xPos + player.width > tile.x) {
//Hits on y axis
if (player.yPos < tile.y + tile.height && player.yPos + player.height > tile.y) {
return true;
}
}
return false;
}
Примечание: Не проще ли сейчас прочитать код?Теперь, когда мы превратили это в фукцию, он может взять любую плитку!
Как, скажем, водные плитки.
//Defines our water tiles in an array. (Easier to use)
var waterTiles = [
{x: 352, y: 64, width: 32, height: 32},
{x: 352, y: 96, width: 32, height: 32},
{x: 384, y: 64, width: 32, height: 32},
];
//Checks if any of the water tiles hit
function checkHits() {
for (var i = 0; i < waterTiles.length; i++) {
//Use our method above.
var check = hit ( waterTiles[i] );
if (check) {
//Code to check if it hits.
}
}
}
Это мило и все, но вы не ответили на мой вопрос.
Ладно, перейдем к логике жажды в вашей игре.
То, как вы настраиваете с помощью шкалы жажды, не показано в вашем коде выше.
Но так как ваша шкала жажды неСброс, вероятно, звучит как переменная, которая не сбрасывается правильно.
Если вы определили var thirst
и var width
бара.Вам нужно изменить оба.
Таким образом, в вашем методе жажды установите уровень жажды: player.thirst = 60;
(пример).
Затем в вашем методе frame () (обычно называемом «update» в игровых циклах) получите что-то от этого thirtкак: var width = player.thirst
Когда вы уменьшаете его (каждый кадр?) Просто установите переменную снова: player.thirst = player.thirst - 1;