Article
OO
Oliver Orangers
02/28/25
Урок 07. Звуки и музыка

Привет, друг! Мы продолжаем наш цикл статей про разработку своего рогалика. На прошлом уроке мы разобрались, как добавлять врагов и делать их появление. Сегодня мы займемся добавлением звуков и музыки.

Для начала скачаем или создадим музыку и звуки, которые могут быть нам необходимы. Gamemaker поддерживает mp3 файлы. Их и скачаем.


Я скачал парочку треков, которые подойдут как музыка и еще несколько для звуков появления монстров.


Как добавить звуки в Gamemaker?

Для начала создадим “Звук” в папке звуки.


Появится окно для создания “Звука”. В Gamemaker музыка и звуки - это одно и тоже в логике движка. Давайте переименуем нашу первую музыку. Я назвал ее “mForest” - музыка Леса.


Теперь нажмем на верхнюю правую кнопку с многоточием. Эта кнопка переведет вас в проводник, в котором вы сможете выбрать нужный звук или музыку.


Все настройки тут связаны с сжатием. Музыка и звуки весят очень много и занимают много места. Поэтому имеет смысл уменьшать качество в угоду размера файла.


Моно, стерео и 3D звук — это различные форматы звукового воспроизведения, которые отличаются по способу передачи и восприятия звука.

Моно звук представляет собой одноканальный звук. Это означает, что звук воспроизводится через один источник, и все звуковые данные передаются в одном канале. При прослушивании моно звука не создается эффекта пространственного звучания, и звук воспринимается как исходящий из одной точки.

Стерео звук использует два канала (левый и правый), что позволяет создать эффект пространственного звучания.

Это достигается за счет различия в уровне и времени прихода звука в оба уха, что помогает создать ощущение ширины и глубины звукового пространства.

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

3D звук (или пространственный звук) идет еще дальше, чем стерео, и может использовать несколько каналов (например, 5.1 или 7.1 системы) для создания более сложного звукового окружения.

Он позволяет звуку перемещаться в трехмерном пространстве, что дает возможность точно позиционировать звуки вокруг слушателя. Это особенно важно в видеоиграх и виртуальной реальности, где игроки могут воспринимать звуки, исходящие из разных направлений и расстояний.

3D звук может использовать технологии, такие как HRTF (Head-Related Transfer Function), чтобы имитировать, как звуки воспринимаются человеческим ухом в зависимости от их источника.

В общем, основное отличие между этими форматами заключается в количестве каналов и способности создавать пространственное звучание, что влияет на восприятие звука слушателем.

При этом важно понимать, что для нашей игры хватит и стерео, 3д здесь не будет. Стерео оставит качество, но моно сократит размер во много раз.


Интервал выборки, качество и скорость в битах - это тоже настройки для качества и размера.


Добавить музыку или звуки, просто перенеся их в комнату, не выйдет.

Тогда, нам нужен объект, который будет выполнять функции по воспроизведению музыки.

Создадим новый объект “oMusicManager” - объект контролирования музыки.


Давайте сделаем его “постоянным”, нажав на галочку.

Это позволит нам перенести этот объект только в первую комнату, а в другие комнаты он сам будет себя клонировать. Удобно!


Давайте подумаем логически. Какое событие нам подойдет?

Мы хотим воспроизводить музыку когда мы заходит в новую локацию-комнату.

Для этого подойдет и любимый наш “шаг”, но он будет проверять информацию каждый кадр. 60 раз в секунду, в нашем случае.

Это никуда не годится, зачем же нам тратить столько ресурсов, когда нам нужно проверять информацию только при переходах в комнаты?

Для наших целей нам подойдет событие “Начало рума”. Оно находится в вкладке “Другое”.


Код в событии начало рума выполняется только в начале загрузки локации.


В этом событии мы с вами запишем простую конструкцию.

Скажем, что если мы заходим в комнату “Название вашей первой локации”(у меня называется rForest), то включается нужная нам музыка - mForest.

Так и запишем:

if room == rForest

{

audio_play_sound(mForest,0,0);

}


audio_play_sound функция, которая имеет 3 обязательных аргумента для функционирования:

  1. Название звука, который нужно воспроизвести
  2. Приоритет, на моей практике не влияет на что-либо.
  3. Зациклен ли будет трек, или нет. Если да, то трек будет повторяться с самого начала, когда закончится. Соответственно, для музыки нам подойдет “true”, а для отдельных звуков - “false”.

С помощью этой функции мы можем легко добавлять новые треки и звуки, куда захотим!

Давайте протестируем. Добавьте этот объект в первую комнату и запустим.


Всё работает!

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

Чтобы включить трек mForest2 в rForest2 нам просто нужно повторить это условие, но если мы протестируем, мы заметим, что во второй комнате теперь будет играть 2 трека.


Давайте добавим новое событие: “Конец рума”. В нем мы будем останавливать ненужные треки!

if room != rForest

{

audio_stop_sound(mForest)

}

Е

сли комната не равна rForest, то останови mForest.

Обращу внимание, что восклицательный знак перед равенством означает “не”.

Можно еще использовать audio_stop_all() чтобы закончить воспроизведение всех треков.

Ну и есть очень удобная !audio_is_playing(mForest).


Если комната(rForest) и трек не воспроизводится(mForest), то воспроизведи mForest.

Соответственно, мы теперь можем и звуки где угодно добавлять.

Покажу, как добавить звук при выстреле.

Можно добавить этот звук в шаге игрока, при выстреле, а можно прям при появлении пули. Вариант один и тот же.

Заходим в событие “создать” у пули и пишем

audio_play_sound.

Всё! Сегодня вот такая простая тема!

Подписывайся на мою группу ВК: https://vk.com/oliora.

И не пропускай следующие мои туториалы!

Ссылка на следующий урок: Урок 08. Переход в другие комнаты - https://cr5.space/h/ru-gamemaker/post/9

Peace!







Comments