Звуковые эффекты XNA сильно замедляют систему - PullRequest
5 голосов
/ 23 декабря 2011

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 25 декабря 2011

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

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

1) вы излучаете только при первом нажатии

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

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

...