Как мне ослабить звук в 2D-игре, где можно увеличивать и уменьшать масштаб?

8

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

В настоящее время я думаю о системе, которая модулирует громкость определенных звуков в зависимости от их расстояния до проигрывателя. Тем не менее, это отчасти не очень хорошее решение, так как (например) в увеличенном состоянии проигрыватель может находиться довольно далеко от источника звука (например, при падении воды), но все же может видеть его на экране, но не слышать его (из-за на расстояние), что довольно неловко.

Есть ли решение для такой проблемы?

ares_games
источник
3
«Лучшие практики» слишком широки, но, похоже, суть вашего вопроса касается масштабирования, которое более ответственно и интересно. Поэтому я удалил немного «лучших практик».

Ответы:

8

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

  • всегда используйте игровое расстояние до объекта от игрока, которое остается неизменным независимо от уровня масштабирования (не используйте расстояние «на экране», которое изменяется при масштабировании) и

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

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

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

  • разработка уровней, чтобы этого не делать, или, если это не жизнеспособно,

  • придание объектам звукового приоритета и выбор объектов с самым nвысоким приоритетом, или

  • уменьшая громкость всех окружающих звуков путем (более или менее) «деления на количество звуков в сцене», следя за тем, чтобы звуки по-прежнему плавно затухали, когда их объекты становятся дальше, чтобы избежать «выскочения» по мере того, как вы дискретно прыгать с пяти объектов на четыре, например.

  • предварительно рассчитать для данного уровня или всей игры максимальное количество объектов, которые могут находиться в пределах досягаемости и воспроизводить звуки одновременно (сделайте это как часть процесса создания уровня или игровых данных). Исходя из этого, вы можете определить, насколько громко играть на каком-либо одном объекте, чтобы в худшем случае никогда не превышать определенную громкость.

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

Чтобы справиться с этой проблемой, я думаю, что вам лучше всего попытаться уменьшить общее количество эмбиентов окружающей среды или использовать только самые nприоритетные звуки (для справки, выбор вершины n- это более или менее то, на чем мы остановились в Guild Wars 2).


источник