5

我刚刚浏览了非常有用的初学者教程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 次,并且很难快速按下按钮,所以现在只播放一次。

但是,它仍然会大大降低游戏速度,这显然并不理想。

显然,我不想对这个特定的游戏做任何事情,但我想知道如何为未来的项目解决这个问题,只是因为它有点烦人。

干杯瑞恩

4

1 回答 1

0

这是问题所在:假设您以 60 fps 的速度运行。如果您按住该键 1 秒钟,您的音效将触发 60 次(请注意,您只检查 .IsKeyDown,只检查一次您需要检查它是否刚刚按下,而不是它是否按下)

所以你有几个解决方案:

1)你只在第一次按下时发射

2)您进入您的 xact 项目并将提示或类别的最大实例限制为合理的(3 是一个很好的数字,使用替换最旧)

虽然您可能想做 #1,但最好的解决方案是 #2,因为它向您介绍了如何在全球范围内适当地限制声音发射,而且当您知道时,您可以做很多很酷的相关 xact 事情(改变音高,随机选择其他声音等)。

于 2011-12-25T10:46:43.153 回答