Файл: Беляев С А - Разработка игр на языке JavaScript - 2016.pdf
Добавлен: 25.10.2018
Просмотров: 7583
Скачиваний: 136
Управление звуком
121
function toggleMute() { // ïðèîñòàíîâêà çâóêîâ
if (this.gainNode.gain.value > 0)
this.gainNode.gain.value = 0;
else
this.gainNode.gain.value = 1;
}
Функция toggleMute вызывается без параметров и
обеспечивает приостановку воспроизведения звуков.
if (this.gainNode.gain.value > 0)
Если звуки воспроизводятся, то в поле value записы
вается 0 и их воспроизведение прекращается, иначе в поле
value записывается 1, и они начинают воспроизводиться
с уровнем громкости 100%.
function stopAll() { // îòêëþ÷åíèå âñåõ çâóêîâ
this.gainNode.disconnect();
this.gainNode = this.context.createGainNode(0);
this.gainNode.conect(this.context.destination);
}
Отключение воспроизведения всех звуков в функции
stopAll осуществляется отключением gainNode от коло
нок и пересозданием gainNode по аналогии с тем, как это
делалось в функции init менеджера звуков.
Использование перечисленных функций позволит сде
лать игру реалистичной и управляемой с точки зрения
звуков.
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
1. В чем отличие использования тега audio от использования Web
Audio API?
2. Какие объекты Web Audio API описаны в данной главе?
3. В чем особенность асинхронного запроса для загрузки звука от
асинхронных запросов, рассмотренных в предыдущих главах?
4. В чем отличие GainNode от AudioContext с точки зрения уп
равления звуком?
5. Для реалистичности воспроизведения звука в игре предлага
ется воспользоваться правилом треугольника. В чем оно за
ключается?
122
Глава 7
6. В объекте clips предлагается хранить клипы. Какие поля пред
лагается хранить в каждом клипе? Зачем нужно поле loaded?
Где и как оно используется?
УПРАЖНЕНИЯ
1. В параграфе 7.1 приведена программа, позволяющая
регулировать уровень громкости проигрывания аудиофай
ла. Разработайте программу, обеспечивающую плавный
переход от одной мелодии к другой.
2. Создайте плеер, который проигрывает выбранную
пользователем мелодию из предлагаемого разработчиком
набора.
3. В упражнениях параграфа 5.4 добавьте звуковое со
провождение при столкновениях и «отскоках» объекта.
ЗАКЛЮЧЕНИЕ
В данном учебном пособии приведены подходы к раз
работке однопользовательской 2Dигры на JavaScript.
Используя приведенный материал может быть разработан
универсальный «движок», позволяющий реализовывать
игры. Отличия игр будут заключаться в графическом и
аудиоматериале, используемых картах, а также логике и
используемой физике игры.
Материал учебного пособия имеет некоторые ограни
чения по применению.
1. Разработка 3Dигр на JavaScript возможна, но це
лесообразно использовать готовые библиотеки, предостав
ляющие необходимые инструменты. Например, с помо
щью Three.js [24], [14].
2. JavaScript является языком, который исполняется
на стороне пользователя в браузере, соответственно, для
сохранения информации на сервер необходимо использо
вание серверных языков.
3. Реализация многопользовательского режима требу
ет взаимодействия с сервером и учета того, что взаимо
действие требует времени.
Существуют различные подходы к реализации много
пользовательских игр [14], по этому поводу можно сде
лать несколько замечаний [9]:
· при создании многопользовательских игр, в которых
участвует большое количество игроков целесообразно
выделять несколько узлов, поддерживающих ограни
ченное количество пользователей;
124
Заключение
· при присоединении нового игрока сервер должен пе
редать ему всю необходимую информацию, аналогич
но в случае сетевого сбоя любой игрок должен уметь
восстановить свое состояние. Самое простое решение —
обеспечить, чтобы сервер всегда предоставлял всем
игрокам всю информацию об изменении состояния
игры, но данный подход не всегда успешно работает;
· в случае, если скорость соединения одного из игроков
слишком низкая, то при реализации полной синхро
низации могут возникнуть сложности с оценкой задер
жки передачи данных. Наиболее совершенный подход
к решению этой проблемы — разработка механизма
«предсказания» действий игрока. Возможны как сер
верный, так и клиентский вариант реализации;
· синхронизация пользовательских компьютеров может
быть выполнена путем синхронизации времени, напри
мер, с помощью внешнего NTPсервера (Network Time
Protocol);
· при вычислении состояния игры рекомендуется умень
шить количество состояний, влияющих на исход игры.
Например, при игре в футбол необходимо, чтобы все
игроки получили состояние перед голом, так как оно
существенно влияет на исход игры;
· не рекомендуется при описании состояния игры ис
пользовать вещественные числа, так как различные
виртуальные машины поразному обрабатывают веще
ственные числа и могут появиться ошибки, связанные
с точностью вычислений;
· чем меньше описание состояния игры, тем проще пе
редать его пользователям, поэтому целесообразно его
максимально уменьшить;
· если возможно отображение игры пользователям с раз
ной частотой, то полезно уметь интерполировать пере
ход из одного состояния в другое.
Успешный опыт реализации даже однопользователь
ской игры позволяет переходить к другим вариантам со
здания игр, например, с помощью современных «игро
вых движков», а возможно, и разработке собственного
Заключение
125
«движка». В настоящее время их большое количество и
они активно развиваются. Например:
· Crafty — http://craftyjs.com/
· CreateJS — http://www.createjs.com/
· CutJS — http://cutjs.org/
· FriGame — http://frigame.org/
· Impact — http://impactjs.com/
· KiwiJS — http://www.kiwijs.org/
· Lime — http://www.limejs.com/
· Melon — http://melonjs.org/
· Phaser — http://phaser.io/
· Platypus — https://github.com/PBSKIDS/Platypus
· Quintus — http://www.html5quintus.com/