Заикание в ритм-играх - симптомы и лечение на примере Lofi Ping Pong
Привет, Пикабу! Пишу первый раз, хочется рассказать всему миру, что моя первая игра вышла на куче платформ, но об этом в конце. Сам пост о задаче, с которой столкнулся уже на релизе.
Итак, меня зовут Коля и я хочу рассказать тебе о проблеме, с который ты можешь столкнуться при разработке ритм-игры (и с которой точно столкнешься, если разработка будет под мобильные устройства). Ну и о её решении тоже поведаю, конечно.
В марте 2019 я выпустил в Steam свою первую ритм-игру Lofi Ping Pong. Это настольный теннис, в котором мяч надо отбивать в такт треку. Летом 2020 мне захотелось отдохнуть от разработки второй музыкальной поделки, так что решил портировать Пинг понг на мобилки и Switch. Тут-то и появились сложности - мяч вдруг начал лететь отрывисто, "заикаться". Чтобы вкратце разобраться с недугом, требуется вступление.
Ниже геймплей игры.
![Заикание в ритм-играх - симптомы и лечение на примере Lofi Ping Pong Ритм-игра, Gamedev, Релиз, Туториал, Гифка, Видео, Длиннопост, Steam, Nintendo Switch, Android, iOS](https://cs13.pikabu.ru/post_img/2020/12/09/0/1607462330178242.jpg)
Про особенность музыкальных игр.
Не буду рассказывать про архитектуру ритм-игр в целом (собираюсь сделать это после выпуска второго проекта), но пояснить за основную идею я обязан.
В большинстве игр обязательно есть какое-либо движение - будь то носящийся по всей карте Meat Boy или падающий с потолка ящик в Portal. Любое перемещение становится плавным, когда мы добавляем один волшебный ингредиент - Delta Time, то есть время между фреймами. С помощью него, как известно, мы перестаем зависеть от выдаваемого фпс, что делает, к примеру, скорость персонажа всегда одинаковой.
И тут тебе приходит сумасшедшая мысль сделать игру, в которой что-то происходит в такт музыке. Ты набросал на бумаге идею, лезешь в любимый движок, чтобы воплощать её в жизнь. К примеру, захотелось сделать настольный теннис, в котором мяч отбиваешь в такт треку, как метроном. Что может быть проще?
У нас есть расстояние между началом и концом полета мяча S. Чтобы рассчитать время полёта T, требуется знать скорость песни - её BPM (beats per minute). Это количество ударов (долей) в минуту, как если бы вы отстукивали темп песни ладошкой по коленке и записали количество шлепков за 60 секунд. Количество чего-либо в единицу времени есть частота, значит, чтобы найти время одного удара (период), достаточно перевернуть её с ног на голову, не забыв перевести в секунды, умножив на 60 (T = 60 / BPM).
В школе вроде учили, что скорость V = S / T. Не забудем добавить в формулу наш любимый delta time, и готово!
Как только мяч долетает до нужной позиции, мы нажимаем кнопку, меняя end point и start point местам, и движение продолжается, но в обратную сторону. И всё идёт прекрасно, пока ты так не поиграешь 10, 30, 60 секунд. После этого начнётся сильнейший рассинхрон между играющей песней и скачущим мячом - каждый новый удар будет всё дальше удаляться от реального бита песни.
Проблема в том, что ты не следишь за настоящей позицией трека. Да, мы включили в формулу его скорость, но этого недостаточно. Правильным методом окажется перемещение мяча с помощью интерполяции по положению музыки (точнее даже будет сказать "экстраполяции").
Ниже позиция трека. Все переменные будут ниже в коде
Тебе надо следить за позицией трека и считать, как много времени прошло с предыдущего бита. Время между битами - как расстояние между start point и end point. Delta between beats будет отображать позицию нашего мяча. Но это довольно странно ставить знак равно между временем (delta between beats) и координатой (позиция мяча). Понятнее будет перевести всё в доли- поделив delta between beats на time between beats мы получим процент между соседними битами. Этот процент будет таким же у мяча между начальной и конечной позицией.
Весь этот блок был написан, чтобы показать зачем и как использовать в качестве двигателя мяча именно сам трек, а не просто его скоростную характеристику. Это и есть то самое ядро, на котором строится ритм игра. Помимо этого, как и в других играх, есть куча нюансов, типа начального оффсета у песни или как учесть визуальный/аудио лаг у игрока в перемещении мяча. Самое главное, мы поняли, что Delta Time нам не нужен.
Про проявление заиканий и решение.
Разобравшись с главным концептом, ты делаешь основную игровую петлю, тестируешь на ПК, все идёт прекрасно. До того момента, как ты решишь запустить игру на мобильном устройстве.
Тут наступает ужасное - мяч летит отрывисто, заикается, как будто игра идёт в 15 фпс. Ты профайлишь игру, но все показатели в норме, да и остальные элементы игры, не зависящие от хода музыки, ведут себя адекватно. Может, мы рано решили избавиться от Delta time?
Ты начинаешь дебажить позицию песни каждый кадр - и что же ты видишь! Оказывается, позиция трека не обновляется покадрово, а скачет, как ей вздумается! Вместо того, чтобы в окне дебага видеть "0, 16, 33, 49, 65, 80..." (мс), показывается вот это "0, 0, 0, 48, 48, 65, 65, 65...". Аудиодвижок просто-напросто живёт своей жизнью и отказывается подчиняться обновлению каждый кадр (те кто работают в Гамаке знают, что если во время теста игры она у вас крашнется, то аудио продолжит работать в отрыве от картинки).
ПК, как известно, платформа помощнее, чем мобильные устройства, и эти фризы там не так заметны (хотя они есть, если знаешь, с чем сравнивать).
Что ж, значит нам придётся вручную "догонять" позицию трека, чтобы она плавно переходила от одного значения к следующему. Плавно... где-то я это слышал... delta time! Почему бы здесь нам не использовать нашего старого друга, ведь всё же мы будем увеличивать позицию искусственным путём.
Но есть куча неправильных и один правильный метод, как это сделать. Оба метода я попробовал на уже выпущенной игре, так что смогу показать примеры работоспособности прямо от игроков.
Пример первый, неправильный. Давайте введём новую переменную для отслеживания позиции трека в предыдущем фрейма lastFrameTrackPosition. Тогда мы каждый кадр можем сравнивать нынешнюю позицию песни и её позицию на предыдущем кадре. Если они совпадают, значит положение песни "не прибавилось", и мы сделаем это сами. Если позиция трека так долго не обновлялась, что lastFrameTrackPositon убежала вперед, то мы сами её увеличим.
Этот метод будет работать уже лучше, но всё ещё не идеально, а самое главное - будут случаться непредвиденные действия со стороны мяча. Например, он может развить огромную скорость и улететь за пределы уровня.
Можно вновь обвинить Delta time и сказать, что дело в нём, но это не так. Точнее, мы просто слегка неправильно его используем.
Давайте оставим переменную lastFrameTrackPosition и введём ещё одну - trackPositionContainer, которая поможет нам не изменять позицию трека напрямую через прибавку delta time, но с помощью постепенного приближения (известного как easing). Мы опять начнём со сравнения положения песни в текущий и предыдущий кадр. Делаем только одно сравнение - не равны ли они, и если они и правда отличаются, то мы приблизим значение trackPositionContainer к позиции трека с помощью среднего арифметического. И возвращать в качестве позиции песни для MoveBall() мы будем именно приблИженное значение контейнера, но не самой рваной позиции трека.
Ниже сравнение с фиксами и без. На видео разницы между 1м и 2м почти не видно, там дело больше в багах с вылетом мяча.
Теперь, наконец, гештальт закрыт. Я перерыл старый код, заново переписал игру, сделал порты на мобилки и сегодня выходит последний порт на Nintendo Switch. Надеюсь, было полезно и хоть немного интересно, ребятки. Оставлю ссылки на всевозможные сторы, если захотите посмотреть проект. Спасибо за прочтение!
Nintendo Switch: https://www.nintendo.ru/-/-Nintendo-Switch/Lofi-Ping-Pong-18...
App Store: https://apps.apple.com/app/id1539408060
Google Play: https://play.google.com/store/apps/details?id=com.Calvares.L...
Steam: https://store.steampowered.com/app/1028570/Lofi_Ping_Pong/
Возможно ли создать игру на телефоне лежа на диване?
Решил на минутку откинуть всеми любимый Unity и Unreal Engine (популярные движки для умных) и попробовать создать простую 2D игру на ДЕШЕВОМ ТЕЛЕФОНЕ не отходя от кассы. Знаю о чем вы можете подумать, но эта мысль давно меня не покидала. Я отобрал самый популярный софт на эту тему и решил исследовать насколько это вообще реально (по крайне мере в 2020).
Такой же непредсказуемый, как реальная экономика: рецензия на онлайн бизнес-симулятор Econia
Если вы давно ждали возможности проверить себя в качестве управленца и посоревноваться с другими желающими построить свою бизнес-империю, у меня для вас хорошие новости - игровой мир, в котором принимаются реальные деловые решения, существует. И находится он прямо в вашем телефоне.
Econia, которая доступна для скачивания на App Store и Play Market с 18 ноября, обещает стать совершенно новым опытом, который вам не сможет дать ни одна из ныне существующих игр в жанре кликера, экономического или градостроительного симулятора. Что же, так ли это на самом деле и каким образом небольшая группа разработчиков из Кипра пытается расширить возможности симуляционных игр, мы и попытаемся разобраться.
Начинается все довольно банально: вы придумываете название для своего бизнеса, а также выбираете понравившиеся корпоративные цвета и логотип. На старте вас будет сопровождать виртуальный помощник, который подробно расскажет обо всех действиях, которые доступны в игре. От мэра города вы получаете небольшой кусок земли, который вам предстоит развивать, имея на балансе весьма скромные игровые деньги. Сразу стоит отметить, что любителей компьютерных игр порадует использование трехмерной графики, а также наличие удобных функций увеличения и вращения. Пока вы играете, по близлежащим улицам курсируют небольшие машинки, а день сменяется ночью под звуки, имитирующие шум большого города.
Игра все еще строится на классических элементах кликеров вроде наскучившей рутины ожидания и прокачки объектов или персонажей. Для того чтобы возвести то или иное здание, необходимо разное количество времени: чем больше и дороже ваш выбор, тем дольше вы будете наблюдать за тем, как таймер отсчитывает драгоценные секунды. Конечно, разработчики предлагают сократить ожидание и посмотреть небольшую рекламу, только в случае со сложными зданиями таких объявлений надо осилить сразу несколько. Как бы то ни было, не забудьте запастись терпением, потому что терпеть вам периодически придется. Как только строительство завершено, возможности повернуть или переместить здание уже не будет. Единственное доступное действие - это снос в том случае, когда бизнес становится нерентабельным.
На первый взгляд, все просто, однако становится гораздо интереснее, когда на одной карте с тобой оказываются еще 13 игроков, готовых посоревноваться, и одна единственная ошибка может стоить вам всего. Старый добрый микроменеджмент принимает новую форму в зависимости от того, как вы предпочитаете взаимодействовать с конкурентами - сотрудничать, завоевывать или вовсе не предпринимать никаких экспансивных шагов, сосредоточившись исключительно на развитии своего дела. Правда, для того, чтобы решать проблемы, присущие каждому типу зданий, и повышать производительность рабочих, вам придется создавать прочные альянсы с игроками, чьи сооружения обладают необходимыми ресурсами. За деньги, конечно, но есть и альтернативное решение - альянсы можно создавать бесплатно в пределах собственной бизнес-экосистемы. Выбор за вами, в любом случае хорошие варианты отмечены зеленым значком большого пальца, а плохие - красным. Вся информация о здании будет доступна в нижней части экрана сразу после долгого нажатия на него. Может показаться, что это немного неудобно, ведь большинство действий в игре совершаются с помощью одного единственного клика.
На третьем уровне появляется возможность сдавать вашу землю в аренду другим игрокам. По мере того, как вы переходите с уровня на уровень, вы получаете новые земли, часть которых предназначена для того, чтобы другие игроки могли открывать свой бизнес на вашей территории и приносить вам дополнительный доход. Все, что нужно сделать, это установить цену и ждать покупателя. Вы также можете арендовать землю другого игрока, оставив заявку арендодателю. Но будьте осторожны, поскольку нечестные владельцы могут с легкостью разорвать договор аренды или попросту снести ваше здание. Знаете, бизнес есть бизнес.
Ещё интереснее станет тогда, когда игра начнет склонять вас к переходу на темную сторону. На карте существуют территории, которые являются общими для всех 14 бизнесменов, и каждый непременно захочет занять их. Однако если сделать это первым вам не удалось, вы всегда сможете бросить перчатку, развязать вендетту и организовать рейдерский захват чужого бизнеса. Один раз в сутки над зданиями в спорных территориях появляется значок мишени, который нужно нажать, чтобы совершить попытку захвата. Количество таких попыток зависит от того, насколько хорошо защищены улицы вашего конкурента. В борьбе за бизнес соперника участвуют еще двое игроков, и, если в конечном итоге его владелец не успевает отразить все атаки, здание переходит рейдеру с наибольшим количеством удачных попыток. Но если бизнесмен, чье дело находится в опасности, это вы, старайтесь реагировать незамедлительно, чтобы защитить своих работников. Небольшой лайфхак: уровень защиты ваших улиц можно повысить, если разместить на них как можно больше зданий с перками “Закон и Порядок”.
На этом преступные злоупотребления не заканчиваются, и на 11 уровне просыпается местная мафия с заманчивым предложением ограбить кого-нибудь из ваших соседей. За 10.000 эконов они соберут все данные и вычислят бизнесменов, которые могут стать вашей идеальной жертвой - игроков, на чьем игровом балансе есть минимум 100.00 эконов. Затем вам нужно заплатить столько же, чтобы совершить ограбление, и что же дальше? Перед вами появляется колесо фортуны, а успех ваших темных делишек становится лишь делом случая! Ну, по крайней мере вы сможете проверить, покровительствует ли Дон Рандом плохим ребятам. Если да, забирайте свою добычу, предварительно разделив ее с рэкетирами. Одну и ту же цель можно атаковать несколько раз до тех пор, пока у вас есть на это деньги, а ваша жертва все еще располагает 100.000 эконов.
Лайфхак номер 2: помимо усиления безопасности ваших улиц, воспользуйтесь услугами банка, который станет доступен на 9 уровне, и откройте депозит (от 100.000 до 500.000 эконов). Это позволит вам спрятать от мафии ваши собственные средства на определенное время, начиная с суток и заканчивая двумя неделями. Кроме того, с помощью банковского счета вы также сможете приумножить свой доход совсем как в реальной жизни. Сразу после того как срок депозита истек, вы идете в банк и забираете деньги вместе с процентами, размер которых зависит от периода, который вы изначально выбрали для хранения. Важно помнить, что открыть одновременно несколько депозитов не получится.
Самое захватывающее в концепции Econia - это то, что каждая деталь, будь то число обитателей, цена на аренду или поведение соперника, имеет значение. Бездумный подход “строю, что хочу” здесь не сработает, и вам действительно необходимо быть вдумчивым, предприимчивым и целеустремленным, невзирая на то, какой стратегии вы хотите придерживаться. Радует, что создатели игры действительно знают, что такое глубокая симуляция, и свою глубину она обретает в тот момент, когда становится ясно - позволить всему идти своим чередом не выйдет. Расширение собственного влияния требует все больше внимания и вложений, что в то же время кратно увеличивает шансы на провал.
Жанр массовой многопользовательской онлайн-игры тоже вносит свои коррективы и лишает вас возможности полностью контролировать все, что происходит. Быть в сети 24/7 вы все равно не сможете хотя бы потому, что люди должны спать, но, пока вы удовлетворяете все свои базовые потребности, другой игрок возьмет и разорвет ваш альянс или прекратит покупать ваши товары, и процветающий бизнес вмиг понесет серьезные убытки. И это не говоря о нечестных арендодателях, коварных рейдерах и вездесущей мафии. Ситуация может измениться в считанные секунды, и если вы вовремя не продемонстрируете свою деловую хватку, то обанкротитесь. Как говорится, начал свой бизнес - попрощайся со сном.
Отдельного внимания достойно то, что вам ежедневно предлагается выполнять задания, которые позволят заработать больше. Как правило, они направлены на расширение и оптимизацию вашего бизнеса, а также на создание прочных связей с другими игроками. Но только вам решать, как действовать - развиваться ли как порядочному бизнесмену или действовать в духе дерзкого агрессора, сметающего всех на своем пути.
Будучи первым в своем роде мобильным градостроительным и экономическим симулятором, объединяющим в себе жанры ММО и стратегии, Econia определенно не является очередной игрушкой для коротания времени. Среди вдумчивых людей она обязательно найдет свое место, но если вы предпочитаете классические кликеры, более подходящие для того, чтобы помочь вам расслабиться, то этот вариант вряд ли надолго задержится на вашем телефоне.
Скачать игру для мобильных устройств можно здесь. На данный момент команда разработчиков начинает бета-тестирование игры для ПК, которую планирует выпустить через полгода.
Ответ на пост «Открытое API Pikabu»
Годы идут. На Pikabu мелькают вакансии разработчиков. А мобильное приложение так и продолжает глючить (оба два по факту).
Я совершенно точно понимаю почему @admin, не горит желанием делится АПИшкой с народом. но мы ведь тоже умеем в программирование и в реверс инжиниринг.
Я не в коем случае не призываю народ к этому, но вопрос "а не легче это переписать самому, чтоб без вот этого всего?" всплывает в голове всё чаще.
@admin, дайте доку на АПИ и мы запилим опенсорсную версию приложения Пикабу с блекджеком и "теми кого нельзя называть". Готов даже предложить простой способ который поможет избежать всякого дерьма типа автопостинга / спама и сопутствующих вещей.
Готовы к Евро-2024? А ну-ка, проверим!
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Реклама ООО «Горенье БТ», ИНН: 7704722037
Rebel Racing v 2 гонки с прохождением Гонка с боссом TYLER
Rebel Racing v 2 гонки с прохождением
Присоединяйтесь к самому эксклюзивному событию шоссейных гонок Америки и сразитесь с элитными гонщиками мира в активном режиме, колесо к колесу действуй! С реалистичной физикой вождения, надстройками speed trak и турбинами, эпическими обгонами и потрясающими локациями западного побережья, Rebel Racing приносит глоток свежего воздуха на мобильный телефон гоночной категории.
Соберите, настройте и обновите парк реальной классики и удивительных суперкаров, а затем пройдите свой путь к вершине турнира Rebel Racing!
- Собственные суперкары и заказная классика
- Создание полностью настроенных автомобилей мечты
- Сразись с лучшими гонщиками мира лицом к лицу
- Лидирующая на рынке графика
- Гонка реальных лицензированных автомобилей
- Испытайте эпические моменты