2011-12-22 4 views
5

Я только что пропустил очень полезный учебник для начинающих в http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php и я доволен результатом.XNA Звуковые эффекты, замедляющие систему массово

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

if (keybState.IsKeyDown(Keys.Enter) || keybState.IsKeyDown(Keys.Space)) 
     { 
      if (!rocketFlying) launch.Play(); 
      rocketFlying = true;  
      ... 
     } 

который играет пусковую Soundeffect, когда нажата кнопка, так как метод обновления проверяет это 60 раз в секунду, и это очень сложно быстро нажимать на кнопку, поэтому теперь она воспроизводится только один раз.

Однако он по-прежнему замедляет игру в массовом порядке, что, очевидно, не идеально.

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

Приветствия Райан

+1

Я не знаю, поможет ли это решить вашу проблему, но если вы посмотрите на этот код, вам нужно проверить, показывают ли последние KeyboardState эти кнопки, или вы можете осуществить задержку между тем, когда вы можете нажать кнопку. – annonymously

+0

Выключите ключ, повторяющийся в вашей системе, и повторите попытку. Если это исправление, то где-то ваше приложение пытается воспроизводить звуковой путь чаще, чем предполагалось, даже если вы только слышите его один раз. – jefflunt

ответ

0

вот проблема: скажем, вы работаете на 60 кадров в секунду. если вы удерживаете клавишу нажатой в течение 1 секунды, ваш звуковой эффект срабатывает 60 раз (обратите внимание, что вы проверяете только .IsKeyDown, чтобы проверить, только если вам нужно проверить, было ли оно нажато, а не если оно опущено)

у вас есть пара решений:

1) вы только испускаете на первой пресс

2) вы идете в ваш Xact проект и ограничить максимальные экземпляры вашей реплики, или категорию, к чему-то разумный (3 - хорошее число, с использованием самой старой)

, в то время как у вас может возникнуть соблазн заняться # 1, лучшим решением является # 2, так как оно знакомит вас с тем, как правильно ограничить выбросы звука во всем мире, плюс есть много интересных связанных вещей, которые вы можете делать, когда знаете (изменять шаг, произвольно выбирать другие звуки и т. д.).

+0

Вот статья, в которой показано, как это сделать: http://xna-uk.net/blogs/offbyone/archive/2010/03/26/sound-in-xna-3-1-part-ii.aspx plus, он содержит объяснения других замечательных xact-функций, о которых я упоминал. – JasonS

+0

Лично я бы, наверное, сделал и то, и другое. Из-за одинаковой важности нужно научиться улавливать определенные события, происходящие в игре. Но отличный ответ, +1 –

Смежные вопросы