Доброго времени суток, дорогие подписчики!
Сегодня решил рассказать, как можно улучшить управление в платформере очень простым способом. Возможно, многие из вас уже используют такой способ. Но те, кто не использует, смогут значительно улучшить опыт игрока, получаемый от управления персонажем в вашей игре добавлением всего пары-тройки строчек кода.
В этой статье я хочу рассмотреть лишь пару таких улучшений, но их в платформере естественно очень и очень много. Игроки даже не представляют, как бережно порой разработчик относится к игрокам, упрощая и улучшая ему передвижение по игровому уровню.
Буфер прыжка (Jump Buffering)
Часто в играх, в частности в моей первой крупной игре платформере про Оливера, игроки жаловались на то, что персонаж не отзывчив в прыжках. Т.е. некоторые нажатия кнопки «прыжок» просто игнорируются и пропускаются игрой. Ведь как чаще всего реализован прыжок в игре? Кодом его можно выразить упрощенно так:
if place_meeting (x,y+1,obj_wall) {
if keyboard_check_pressed (vk_space) {
vspeed = -10
}
}
Т.е. код проверяет, стоит ли игрок на земле. Если стоит, и нажата клавиша «пробел», то игрок подпрыгивает.
Что не так в данном методе и почему одни игроки жалуются на управление прыжком, а другие нет? Все дело в реакции игроков. Часто бывает так, что герой еще не приземлился, остается буквально один-два пикселя даже, а игрок уже жмякает на кнопку прыжка. Естественно, ничего не происходит, так как проверка на то, стоит ли герой на земле, не проходит в этот момент.
Что можно с этим сделать? Смысл в том, что при нажатии на пробел не совершать сам прыжок, а лишь запускать некий таймер с обратным отсчетом. А при нахождении персонажа на земле, если таймер еще не обнулился — совершать уже сам прыжок. Кодом это может быть выражено как-то так:
if keyboard_check_pressed (vk_space) {jump_timer=5}
if jump_timer > 0 {
jump_timer -= 1
if place_meeting (x,y+1,obj_wall) {
vspeed = -10
jump_timer = 0
}
}
Вот и все! При таком способе прыжки ощущаются идеально! Даже если игрок нажмет клавишу прыжка еще за секунду до приземления, то при приземлении герой сам подпрыгнет. Т.е. данный код просто компенсирует реакцию игрока.
Время койота (Coyote Time)
Второй способ чаще всего называют именно так — «время койота». Смысл в том, что игроки боятся прыгать с самого края платформы. Они нажимают на прыжок не доходя какое-то расстояние до края. Если же они понимают, что им не допрыгнуть так, и, чтобы преодолеть данную пропасть, необходимо прыгать с самого края — зачастую реакция их снова подводит и они падают с платформы, не успев нажать на прыжок.
Что такое «время койота» ? Смысл в том, чтобы дать игроку доли секунды на прыжок, даже после того, как он уже упал с платформы.
Это так же можно реализовать с помощью таймера с обратным отсчетом, который включается при падении игрока с платформы и в течении которого игрок еще может совершить прыжок. В коде это можно выразить так:
if hero_on_ground = false {
if coyote_timer > 0 {
coyote_timer -= 1
if jumped = false {
if keyboard_check_pressed (vk_space) {
vspeed = -10
jumped = true
}
}
}
} else {
jumped = false
coyote_timer = 5
}
Вот и все! Проверяем, находится ли игрок на земле. Если таймер времени койота больше нуля, то отнимаем его каждый шаг. Тут же проверяем, находится ли герой уже в прыжке. Если нет и нажат пробел, то подпрыгиваем. Если же игрок находится на земле, то таймер времени койота ставим на максимум.
Код не мой, взят из другого источника. Изначально я делал немного по другому, но данный вариант более лаконичный как по мне.
Теперь я уверен игроки смогут в полной мере насладиться платформингом в моей новой игре.
Спасибо, что дочитали до конца! Надеюсь материал вам понравился. Пусть он не совсем для новичков, но такая информация тоже может быть кому-то полезна. Делитесь статьей, ставьте лайки, комментируйте, задавайте вопросы. Хотя бы так я вижу хоть какую-то активность, что для меня является мотивацией продолжать вести данный блог.