разработка игр, программирование, сценарии, графика и музыка

English По-русски

Проигрывание музыки и управление памятью в Citadelic

На прошлой неделе я писал о создании музыки для Citadelic. Сегодняшняя статья — о добавлении этой музыки в игру.

Музыка и звуки могут потенциально использовать больше RAM, чем любые другие ресурсы игры. Очень важно правильно управлять памятью при использовании больших файлов, иначе у игры могут быть проблемы со слишком длительными загрузками, а в некоторых случаях — с утечкой памяти, которая может привести к крэшу.

В моём движке есть система, которая автоматически подгружает музыку, которая скоро может понадобится. Все мои предыдущие игры основаны на уровнях, и движок заранее знает, какая именно музыка может потребоваться, так как эта информация доступна в сценарном файле уровня. Таким образом движок может удалить из памяти ненужную музыку, загрузив туда только необходимые треки. Поэтому в памяти обычно хранится только 1 или 2 трека. Это снижает использование RAM и уменьшает время загрузки каждого уровня.

Но проблема в том, что Citadelic не разбит на уровни, как мои предыдущие игры. Всего в игре около 40 минут музыки, разбитой на 6 треков, которые должны проигрываться в случайном порядке. Возможна ситуация, когда все треки нужно загрузить и воспроизвести за одну игровую сессию. Кроме того, есть 7-ой трек "Preparation", который всегда играет в меню игры.

Один из возможных подходов: загрузить всю музыку в начале игры, но это может занять слишком много времени, так как загрузка и декодирование одного трека может занять несколько секунд.

Другой вариант: загружать маленькие кусочки музыки "потоком" напрямую с жёсткого диска, вместо того, чтобы загружать весь трек целиком. Это снизит использование RAM, но означает, что постоянно будут считываться и декодироваться данные во время игры. Этот подход неплохой, и, я думаю, многие игры так себя и ведут.

Самый простой подход — это загружать музыкальный трек в тот момент, когда нужно его воспроизвести. Но это может привести к затормаживанию игры, так как загрузка может занять несколько секунд. Чтобы этого избежать, достаточно перенести загрузку и декодирование музыки из основной нити процессора в фоновую нить. То есть музыка подгружается в нужный момент в асинхронном (фоновом) режиме. Я решил использовать этот вариант.

Я также добавил простую систему плейлиста в игру, которая случайно перемешивает треки, чтобы они воспроизводились в разном порядке каждый раз. К тому же я добавил небольшой проигрыватель музыки в меню игры, где игрок может сам выбрать и включить понравившийся трек.

Выбор музыки в игре.
Выбор музыки в игре.

Разработка игры близка к завершению, но остались две большие задачи: добавление медалей (и Steam Achievements), и финальное тестирование и балансировка игры.

Демо-версия Citadelic доступна в Steam. Добавьте игру в свой список желаний, если она понравилась!

Следующая статья

Медали и достижения Steam в Citadelic

Подписаться

Получайте уведомления о новых статьях, чтобы:

Следить за процессом разработки моей следующей игры.

Читать статьи об искусстве и технологиях создания игр и движков.

Получать новости об изменениях в моих играх.

Подписка бесплатная, просто нажмите на кнопку!