|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Провисания FPS из-за звука. Способы обойти?
Готовим мобильную игру к продакшену, и проводим закрытые альфа тесты. И вот сейчас при тестировании на довольно слабом устройстве Samsung Galaxy Ace 3, обнаружилось, что при стрельбе FPS часто провисает с 60 до 47 - 45. Конечно это не так критично, но все равно не приятно. Покопавшись и оптимизировав все, что только можно, пришел к выводу, что провисания происходят не из-за расчетов, а из-за звука.
Каждое оружие имеет объект Sound, который воспроизводится при выстреле, _sound.play(). Есть автоматы, которые стреляют до 15 раз в секунду. Соответственно, каждую секунду, метод Sound#play() создает до 15 новых объектов SoundChannel. Если звук отключить, то FPS не провисает даже при наличии на экране одновременно 10 и более персонажей, которые двигаются и атакуют. Есть у кого-нибудь идеи, как это можно решить? |
|
|||||
Я всегда думал, что все делают звук с помощью SoundManager)
Это - класс, в котором находится список звуков, и можно вызывать тот или иной звук по константам с помощью одного метода. И в нём проводи всю оптимизацию вместо этих саундов, к примеру один и тот же звук не воспроизводи два раза одновременно. Гаси предыдущий. Если критично, то поставь ограничение на кол-во звуков, воспроизводящихся одновременно.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
делать наложение звуков через gpu, либо как то кешировать два накладываемых звука в один.
например 15 выстрелов подряд можно кешировать и проигрывать как один. игрок прострелял 7 выстрелов, перестал, проигрывание прерываем, находим время, включаем одиночный выстрел и перематываем так что бы тютелька в тютельку. или просто выключаем по таймеру(но таймер не точный) можно еще играть звук нативно или просто зменить формат на аппаратно поддерживаемый(если он сейчас не такой) |
|
|||||
Оптимизацию чисто эстетическую провести. Я на слух определю стрельбу из 2 автоматов, а дальше 3 и больше даже считать не буду. Имеет смысл устраивать какофонию из отдельных выстрелов?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Цитата:
Цитата:
Цитата:
Последний раз редактировалось caseyryan; 19.01.2015 в 07:36. |
|
|||||
Событие будет наступать постоянно, если играть нечего, то ничего не делаем. Если есть что играть, начинаем скармливать семплы. Т.е. звук будет храниться в сыром виде (после Sound#extract или сразу их хранить в сыром виде или в WAV), если надо проиграть сразу несколько звуков, то семплы смешиваются перед записью в поле data.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Событие наступает только один раз. Далее после скармливания ему байт массива оно отправляется снова. Опять один раз. Даже если создать новый звук и вызывать у него метод play, указав количество повторений int.MAX_VALUE, оно все равно отправится один раз. Но в том то и проблема, что мне нужно не по каждому проходу события кормить его семплами, а через строго определенные промежутки времени. Для каждого оружия свои, а так как событие проходит единоразово, я не мого подождать наступления нужного момента, чтобы "разрешить" передачу ему байтмассива звука
Последний раз редактировалось caseyryan; 20.01.2015 в 08:13. |
|
|||||
caseyryan, а что если сделать 2 версии выстрела - короткую и полную(или "множественную" и полную), и вместо воспроизведения нового звука подсчитывать кол-во вызовов в секунду/четверть секунды, в зависимости от этого формировать серию из порядка звуков? Я это имел в виду под "оптимизацией".
Завершающий выстрел должен быть полным, а множественный - промежуточным, когда выстрелов было больше 1-2 за одну единицу времени. И выбрать единицу времени, например, 50-100 мс, засчитать это как небольшую задержку. В энтерфрейме каждые 50/100 мс проверять кол-во выстрелов(запросов к этому семплу), и в зависимости от этого играть нужный семпл? Или получается в итоге много операций? Можно при слишком уж большом кол-ве запросов просто увеличивать громкость множественного, чтобы подчеркнуть "сочность"
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 22.01.2015 в 20:06. |
Часовой пояс GMT +4, время: 20:12. |
|
« Предыдущая тема | Следующая тема » |
|
|