Файл: Беляев С А - Разработка игр на языке JavaScript - 2016.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 25.10.2018

Просмотров: 6942

Скачиваний: 112

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Управление звуком

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. Для реалистичности воспроизведения звука в игре предлага

ется воспользоваться правилом треугольника. В чем оно за
ключается?


background image

122

Глава 7

6. В объекте clips предлагается хранить клипы. Какие поля пред

лагается хранить в каждом клипе? Зачем нужно поле loaded?
Где и как оно используется?

УПРАЖНЕНИЯ

1. В параграфе 7.1 приведена программа, позволяющая

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

2. Создайте плеер, который проигрывает выбранную

пользователем мелодию из предлагаемого разработчиком
набора.

3. В упражнениях параграфа 5.4 добавьте звуковое со

провождение при столкновениях и «отскоках» объекта.


background image

ЗАКЛЮЧЕНИЕ

В данном учебном пособии приведены подходы к раз

работке однопользовательской 2Dигры на JavaScript.
Используя приведенный материал может быть разработан
универсальный «движок», позволяющий реализовывать
игры. Отличия игр будут заключаться в графическом и
аудиоматериале, используемых картах, а также логике и
используемой физике игры.

Материал учебного пособия имеет некоторые ограни

чения по применению.

1. Разработка 3Dигр на JavaScript возможна, но це

лесообразно использовать готовые библиотеки, предостав
ляющие необходимые инструменты. Например, с помо
щью Three.js [24], [14].

2. JavaScript является языком, который исполняется

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

3. Реализация многопользовательского режима требу

ет взаимодействия с сервером и учета того, что взаимо
действие требует времени.

Существуют различные подходы к реализации много

пользовательских игр [14], по этому поводу можно сде
лать несколько замечаний [9]:

· при создании многопользовательских игр, в которых

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


background image

124

Заключение

· при присоединении нового игрока сервер должен пе

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

· в случае, если скорость соединения одного из игроков

слишком низкая, то при реализации полной синхро
низации могут возникнуть сложности с оценкой задер
жки передачи данных. Наиболее совершенный подход
к решению этой проблемы — разработка механизма
«предсказания» действий игрока. Возможны как сер
верный, так и клиентский вариант реализации;

· синхронизация пользовательских компьютеров может

быть выполнена путем синхронизации времени, напри
мер, с помощью внешнего NTPсервера (Network Time
Protocol);

· при вычислении состояния игры рекомендуется умень

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

· не рекомендуется при описании состояния игры ис

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

· чем меньше описание состояния игры, тем проще пе

редать его пользователям, поэтому целесообразно его
максимально уменьшить;

· если возможно отображение игры пользователям с раз

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

ской игры позволяет переходить к другим вариантам со
здания игр, например, с помощью современных «игро
вых движков», а возможно, и разработке собственного


background image

Заключение

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/