- Описание
- Отправленные решения
483. Музыка движения
Нужно реализовать симулятор шарика, падающего на металлические платформы. Каждая платформа при столкновении с шариком должна издавать звук определенной частоты.
Формат ввода
В качестве решения надо прислать функцию следующего вида:
export function solution(player, platforms, audioContext, destination) {
let { x, y, vx, vy, ax, ay } = player;
// your code here
return player;
}
Данная функция будет вызываться в цикле на каждый момент времени и принимать следующие параметры:
player
— параметры текущего положения и движения шарика. Можно считать, что шарик — точечного размера (ширина и высота — 1 пиксель). x, y — координаты положения шарика. Считаем, что ось x идёт слева направо, а ось y снизу вверх. vx, vy — скорости шарика по горизонтали (ось x) и вертикали (ось y). ax, ay — ускорение шарика по тем же осям.platforms
— массив параметров металлических платформ следующего вида{ x: 200, y: 560, width: 50, height: 6, freq: 261.63 }
, где x и y положения центров платформ, а freq — частота звучания платформы при столкновении с шариком.audioContext
— AudioContext.destination
— финальное назначение звука, куда нужно присоединить любые другие создаваемые нодыWebAudio
.
Формат вывода
Функция должна вернуть новое положение шарика, и при определении столкновения проиграть звук столкновения.
На каждый вызов функции solution
должно определяться новое положение по обычным законам физики (считаем, что интервал времени между вызовами равен 1):
- v_new = v_old + a;
- x_new = x_old + v_old;
- a_new = a_old;
При столкновении с платформой (считаем, что все такие столкновения происходят только сверху вниз), пересчитываем скорость по следующим законам:
- vx_new = -vx_old
- vy_new = -0.5 * vy_old;
- остальные значения не меняются, считаем, что столкновение происходит только на верхней части платформы.
Кроме этого при столкновении должен проиграться звук с частотой freq из параметров платформы.
Для воспроизведения звука используем OscillatorNode
с треугольным типом волны 'triangle'
и длительностью звука 250 миллисекунд.
Примечание
Чтобы упростить тестирование решения, можно скачать приложенный архив.
Ограничения
Ограничение времени
30 с
Ограничение памяти
640 МБ