Форум программистов, компьютерный форум, киберфорум
Игровые движки
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/28: Рейтинг темы: голосов - 28, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 11
1

Godot - звуки перемещения

12.06.2020, 14:16. Показов 5345. Ответов 1

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем участникам форума! Хочу узнать ваше мнение.
Во время разработки игры на Godot Engine, жанра платформер, захотел сделать так, что звуки шагов будут воспроизводиться случайно (т. е. при каждом шаге воспроизводиться, условно говоря, отдельный звуковой файл). Как я это реализовал:
1. В скрипте adventurer установил булеву переменную isFootstepSound = false. Она отвечает, играет ли в данный момент звук шага.
2. В сцене игрового персонажа (все узлы находятся под главным узлом типа KinematicBody2D) создал узел-пустышку sounds (хранит звуковые эффекты для различных состояний персонажа), в нем - такой же узел под названием footsteps, в котором хранятся узлы типа AudioStreamPlayer2D, каждый узел - отдельный звук шага. Итого, если бы нам понадобилось вызвать какой-то отдельный звук, то мы бы использовали $sounds/footsteps/footstep_01.
3. Также в скрипте создан массив footstep_sounds, хранящий адреса шагов по вышеуказанному примеру.
4. Далее, идет кусок кода, собственно, отвечающий за воспроизведение звука:
Python
1
2
3
4
if velocity.x != 0 and is_on_floor() and isAttacking == false and isSound == false:
        isSound = true
        var footstep_variant:= int(rand_range(0,len(footstep_sound)))
        get_node("sounds/footsteps").get_child(footstep_variant).play()
Пояснение: is_on_floor() - стандартная функция, проверяющая, есть ли пол под персонажем; isAttacking - переменная, использующаяся в коде атаки (по сути, если она активна, а персонаж стоит на земле, то двигаться он не будет).
Генерируется число, определяющее, какой звук будет проигран. После этого из sounds/footsteps вызывается узел звукового эффекта, соответствующий номеру (если сгенерирован 0, будет вызван sounds/footsteps/footstep_01 и т. д.).
После того, как эффект шага заканчивается, вызывается соответствующая для каждого звукового эффекта функция, выключающая isSound и, таким образом, дающая возможность проиграть следующий случайный звук шага:
Python
1
2
3
4
5
6
7
8
9
10
func _on_footstep_01_finished():
    isSound = false
func _on_footstep_02_finished():
    isSound = false
func _on_footstep_03_finished():
    isSound = false
func _on_footstep_04_finished():
    isSound = false
func _on_footstep_05_finished():
    isSound = false
Хоть я и пришел к этому достаточно костыльному решению нескорыми путями, он (внезапно сработал), все работает как задумано. Однако закралось сомнение: нельзя ли было сделать как-то покомпактнее и эффективнее? Если среди вас есть знатоки Godot, буду рад услышать ваше мнение!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2020, 14:16
Ответы с готовыми решениями:

Проблема с наушниками - очень тихо воспроизводятся системные звуки и звуки в играх.
Такая проблема: системные звуки и звуки в играх и программах очень тихо воспроизводятся. Могу...

Шифрование методом Цезаря/простого перемещения/двойного перемещения/простой замены
Всем привет, так случилось что мне задали за пару дней сделать программу шифрования и дешифрования...

В списке сделать команды перемещения элемента вверх и вниз по списку (две кнопки для перемещения в ListBox)
Помогите плз с прогой. Задание: в списке сделать команды перемещения элемента вверх и вниз по...

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

1
Эксперт С++
4109 / 1908 / 958
Регистрация: 01.06.2021
Сообщений: 6,732
Записей в блоге: 6
20.08.2024, 08:17 2
Есть же AudioStreamRandomizer, посмотрите его возможности, может быть он вас устроит.

Также не понял смысл переменной isSound. Вы используете эту переменную для проверки, что аудио не проигрывается.
Но зачем она, если у AudioStreamPlayer2D есть метод is_playing() и своя переменная playing.
0
20.08.2024, 08:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2024, 08:17
Помогаю со студенческими работами здесь

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

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

Звуки
Перезагрузился под винду впервые за месяц, почему-то через каждые пять минут звук типа ту-ту-тун....

Звуки в ЖД
Дня 3 назад обратил внимание, что каждые 2- 2.5 минуты в месте где расположен ЖД слышен звук Цык, а...

звуки (SoundPlayer)
Вопрос собсвенно в следующем, как звуковой файл связать с объектом класса SoundPlayer, причем чтобы...

Посторонние звуки
У меня возникают посторонние звуки - скрип и тому подобное. От перемещения мышки по меню, от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru