我刚刚在 上完成了非常有用的初学者教程。 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次,并且很难快速按下按钮,因此现在只播放一次。
但是,它仍然大大减慢了游戏速度,这显然不理想。
显然,我不想对这个特定的游戏做任何事情,但我想知道如何为 future 的项目解决这个问题,只是因为它有点刺激。
干杯
瑞安
最佳答案
问题是:假设您以 60 fps 运行。如果您按住该键 1 秒钟,您的声音效果将发出 60 次(注意您只检查 .IsKeyDown,只检查一次您需要检查它是否刚刚按下,而不是它是否按下)
所以你有几个解决方案:
1) 你只在第一次按下时发射
2) 你进入你的 xact 项目并将你的提示或类别的最大实例限制在合理的范围内(3 是一个很好的数字,使用替换最旧)
虽然您可能会尝试做 #1,但最好的解决方案是 #2,因为它向您介绍了如何在全局范围内正确限制声音发射,此外,当您知道(改变音高,随机选择其他声音等)。
关于XNA 音效大幅降低系统速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609719/