30.
Только что закончился очередной LudumDare (подробнее про геймджемы я уже как-то писал). В этот раз мы делали игру про исследование подводного мира и из этого проистекает очевидная проблема: в условиях плохой видимости исследовать очень сложно, а без плохой видимости, подвода совсем не ощущается как подвода. Мы уже делали игру про исследование, и там плейтесты показали, что игроки теряются без возможности найтись.
Поэтому в этот раз мы решили позаимствовать игровую механику у древних греков, придумавших, что для прохождения лабиринта нужно разматывать за собой клубок нити. В нашем случае роль клубка выполняет кислородный шланг, который на другой стороне держит твой товарищ-краб. Я (а я был в этом джеме штатным программистом) вообще не был уверен, что это дело получится реализовать. Получилось, но, как водится, не без проблем.
Наша верёвка — это просто последовательность точек. Причём первая точка всегда привязана к базе, а последняя — к игроку. Для начала надо было научиться выбрасывать за собой нить. Для этого смотрим на расстояние между текущим положением игрока и предыдущим звеном верёвки и если оно стало больше длины звена — добавляем текущее положение в последовательность.
Результат уже будет выглядеть довольно симпатично. Но вот только верёвки так себя не ведут, нужно её как-то стягивать. Честно симулировать физику верёвки звучит сложновато, так что применяем хак: проходимся по всем тройкам точек из которых состоит верёвка. Находим вектор их выпрямления (как надо сдвинуть среднюю точку, чтобы все три оказались на одной линии) и пытаемся сдвинуть (естественно с некоторым ограничением на скорость сдвигания).
Это выглядит довольно красиво, но полностью игнорирует наличие физических объектов. Чтобы это исправить добавляем проверку: если на пути верёвки после сдвига есть какой-то физический объект — сдвиг не осуществляем. Теперь можно обмотать клубком ниток какой-нибудь подводный остров!
Тут бы можно было бы и остановиться, но я исключительно ради (как оказалось, довольно бесполезной) оптимизации добавил ещё сборку мусора: дополнительный проход, который удаляет лишние сегменты верёвки.
Ура? В целом да, однако верёвка всё ещё любит застревать в текстурах, а игрок в процессе отматывания вынужден иногда прерываться на то чтобы распутаться (а решение этой проблемы сильно выходило за временные рамки джема). Насколько эта механика помогает не потеряться в атмосферном подводном приключении — можете проверить сами, поиграв в Crab with a Hook! (Игра, кстати, довольно неплохо работает в браузере, так что качать ничего не придётся).
Post #98
1.16K
- ❤🔥 7
- 🔥 5
- 👍 2
- ❤ 1