Индустрия видеоигр [7] |
Разработка игр [64] |
Гейм-дизайн и графика [11] |
Сторонние движки и конструкторы [1] |
Прочее [3] |
Уроки по Game Maker [3] |
Game Maker 8.1
Классика. Идеально подходит для создания простых 2D игр на PC. Требует активации. | |
Game Maker for Mac
Абсолютно та же программа, но только для пользователей Mac. Требует активации. | |
Game Maker Studio
Самая новая версия с возможностью кроссплатформенной разработки. Бесплатна. |
Агент Green | 4.2 / 5.0 |
FeDo | 4.2 / 5.0 |
To Mars: Sec... | 4.2 / 5.0 |
To Mars+MapE... | 3.9 / 5.0 |
Paintball | 3.8 / 5.0 |
Топ игр составлен путем пользовательского голосования.
Если вы не согласны с какой-либо оценкой, примите участие и поставьте свой балл игре. Ваша оценка очень важна для нас ;)
Главная » Статьи » Разработка игр |
3D-звук в Game Maker 8 как в игре ToMars Secrets of Phobos
Вероятнее всего некоторый программный код, представленный ниже не будет работать в Game Maker Studio 1 из-за отсутсвия поддержки некоторых функций. Вероятно, в Game Maker Studio 2 такая же ситуация. Поэтому, если вы используете GMS1 или GMS2, то Вам придётся изменить часть кода. 1. Качаем пример отсюда или отсюда, или гуглим по ключевым фразам GMFMODSimple, FMOD для Game Maker или что-то подобное. 2. Ознакамливаемся с примерами, имеющимися в архиве. 3. Замечаем, что в примерах имеются очень много скриптов. 4. Импортируем скрипты из примера в свой проект, или просто копируем. Все скрипты не понадобятся, да и на размер игры/производительность может сказаться не лучшим образом. Вот эти функции использовались в игре ToMars Secrets of Phobos: Так что для большинства задач этого хватит. В будущем, можно будет добавить и остальные функции. 5. Копируем fmodex.dll и GMFMODSimple.dll в папку со своим проектом. 6. Складываем звуки, которые будут звучать Вашей игре через FMOD в папку со своим проектом, а лучше сделать подпапку для звуков. В ToMarsSoP использовались форматы звуков wav и ogg, но скорее всего FMOD поддерживает и другие форматы. 7. Теперь пишем код для инициализации библиотеки FMOD. Напишите код в таком месте, чтобы он выполнился один раз в начале игры: [code] LoadFMOD(); //Объявляются все нужные переменные, которые нужны будут для работы с dll-файлами от FMOD FMODinit(100, false); //Не помню, что означаем 100 и false FMODSetWorldScale(0.04); //Устанавливаем коэффициент масштаба размеров мира, для перевода пикселей в метры. В ToMarsSoP стояло число 0.04, что означает, что 1 пиксель игрового мира соответствует 0.04 метра (4 см) в реальном мире. Будет использоваться для правильного расчёта эффекта Допплера FMODSetDopplerFPS(60) //Указываем, какой FPS в Ваше игре. Также используется для расчёта эффекта Допплера FMODMasterSetVolume(1.0); //Устанавливаем громкость. 1.0 соответствует громкости в 100% [/code] 8. Для удобной загрузки звуков в ToMarsSoP был создан скрипт LoadSoundFoFMOD. Его можно скопировать отсюда (скрипт писался во времена создания ToMarsSoP, сорри за стиль): [code]//Скрипт создаёт глобальную переменную с названием звука, в которую вписан id звука для проигрывания через FMOD //argument0 - относительный путь к файлу (с именем и расширением), например: "sound/weapon/marker1.wav" //argument1 - громкость для нового звука //argument2 - максимальное расстояние, на котором громкость максимальна //argument3 - максимальное расстояние, на котором звук ещё слышен //Если argument2 == 0 и argument3 == 0, то звук загружается как 2D, в противном случае в 3D if !file_exists(argument0) exit i=1 name_file='' repeat string_length(argument0) //отсекаем путь своим способом { if string_char_at(argument0,i)<>'/' and string_char_at(argument0,i)<>'\' { name_file+=string_char_at(argument0,i); i += 1; } else { name_file = ''; i += 1; } } //отсекаем всё, после точки i = 1; var_name = ''; repeat string_length(name_file) { if (string_char_at(name_file,i)<>'' and string_char_at(name_file,i)<>'.' and string_char_at(name_file,i)<>' ') { var_name+=string_char_at(name_file,i); i += 1; } else { var_name += '_snd'; break; } } is_3d = 1; if argument2 == 0 if argument3 == 0 is_3d=0; if is_3d=1 { variable_global_set(var_name,FMODSoundAdd(argument0,1)); FMODSoundSetMaxVolume(variable_global_get(var_name),argument1); //настраиваем макс. громкость для нового звука FMODSoundSetGroup(variable_global_get(var_name), 4); //настраиваем какую-то группу для нового звука FMODSoundSet3dMinMaxDistance (variable_global_get(var_name),argument2, argument3); //настраиваем макс. расстояние, на котором ещё слышно } else { variable_global_set(var_name,FMODSoundAdd(argument0)); FMODSoundSetMaxVolume(variable_global_get(var_name), argument1); //настраиваем макс. громкость для нового звука FMODSoundSetGroup(variable_global_get(var_name),4); //настраиваем какую-то группу для нового звука } [/code] 9. После кода, который мы писали выше для инициализации FMOD пишем следующее: [code] LoadSoundFoFMOD("sound/weapon/RPG7.wav", 1, 10, 1500); //Звук выстрела из РПГ-7 LoadSoundFoFMOD("sound/weapon/m79.wav", 1, 10, 900 ); //Звук выстрела из M-79 LoadSoundFoFMOD("sound/weapon/AK74M.wav", 1, 10, 1800); //Звук выстрела из АК-47М LoadSoundFoFMOD("sound/weapon/distant2.ogg", 0.8, 1000, 4000); //Звук выстрела из чего-то на большим расстоянии //и т. д. для остальных звуков [/code] Тут мы вызываем несколько раз написанный нами скрипт LoadSoundFoFMOD. Первым аргументом скрипта идёт путь до звукового файла, который мы хотим загрузить. Путь указывается относительно исполнительного файла Ваше игры. Вторым аргументом идёт базовая громкость звука (1 == 100% громкости). Третьим аргументом идёт расстояние в пикселях, от источника звука до "слушателя", на котором громкость будет оставаться максимальной. Четвёртым аргументом идёт расстояние в пикселях, на котором звук уже не слышен. Если Вы хотите, чтобы FMOD воспроизводил звук без эффекта 3D, то два последних аргумента можно не указывать, или указать значение 0. После каждого вызова функции при удачной загрузки звука будет создаваться глобальная переменная, которая будет содержать ID (идентификатор) загруженного звука. Эти переменные с ID звука мы будем использовать в дальнейшем. Например, для первого звука "sound/weapon/RPG7.wav" будет создана переменная global.RPG7_snd, которая будет содержать ID звука выстрела из РГП-7, для второго звука будет создана переменная global.m79_snd, которая будет содержать ID звука выстрела из M-79 (гранатомёт как у терминатора из "Терминатор 2") и т.д. Обратите внимание, регистры символов названия переменной будут соответстовать регистрам символов имени файла. Не используйте в своей игре одинаковые имена файлов звуков, даже если эти файлы будут находиться в разных папках. Иначе некоторые звуки не получится воспроизвести. В противном случае, Вам придётся переделать функцию LoadSoundFoFMOD, чтобы у Вас была поддержка звуков с одинаковым именем файлов. 10. На этом подготовительную часть мы закончили. Теперь напишите следующий код, который будет вызываться каждый шаг (тик/кадр), например, в событии End Step какого-нибудь объекта: [code] FMODListenerSet3dPosition (1, view_xview+view_wview / 2, view_yview + view_hview / 2, 0); //Обновляем позицию слушателя FMODUpdate(); //Обновляем состояние библиотеки FMOD [/code] Первым аргументом FMODListenerSet3dPosition идёт номер слушателя, начиная с единицы. В большинстве случаев менять не нужно, хотя Вы можете поэкспериментировать. Вторым и третьим аргументов идёт координаты x и y, которые отражают позицию слушателя в игровом пространстве. Выражение "view_xview+view_wview / 2" и "view_yview + view_hview / 2" означает, что слушатель будет привязан к середине нулевого вида, но Вы можете привязать координаты слушателя, например, к главному герою Вашей игры. Третьим аргументом идёт координата z, которая в большинстве случаев в 2D-играх всегда указывается как 0. 11. Теперь, чтобы воспроизвести какой-либо 3D-звук, достаточно вызвать функцию FMODSoundPlay3d: [code] FMODSoundPlay3d(global.RPG7_snd, x, y, 0, false); [/code] Первым аргументом указывается ID звука, который мы хотим воспроизвести. В нашем случае, первым аргументом указана переменная global.RPG7_snd, которая содержит в себе ID звука выстрела из РПГ-7. Второй и третий аргумент - x и y координаты источника звука. Четвёртый аргумент - z-координата источника звука, в 2D-играх обычно ставят 0. Пятый аргумент - поставить ли этот звук на паузу, обычно тут ставится false. Даже не могу привести пример, в каких случаях может понадобиться поставить тут true.
12. Ну, а теперь, чтобы при выходе из игры не возникало никакой ошибки, вставьте код в событие Game End какого-нибудь объекта, который будет существовать до тех пор, пока не выйдите из игры: [code] FMODAllStop(); //Останавливаем все звуки [/code] UPD: в архив добавил простой пример StereoSimpleDemo.gmk реализациий трёхмерного стереозвучания для игры с видом сверху | |
Просмотров: 1155 | Комментарии: 8
| Теги: |
Всего комментариев: 8 | |||||||||
| |||||||||