【问题标题】:C# : game sound when user presses a key quicklyC#:用户快速按键时的游戏声音
【发布时间】:2021-09-27 21:31:37
【问题描述】:

我正在尝试创建一个飞扬的小鸟克隆,但我有点卡在游戏效果上。 我正在使用 SoundPlayer 类加载一个 .wav 文件并在用户按下某个键以使鸟飞得更高时播放它。

但我的问题是当用户不断按下键或再次快速按下相同的键时。

每次重放声音时都会中断声音(如果尚未完成)。

我该如何解决这个问题?有没有办法在重新播放之前检查声音是否已经结束?

或者也许使用 SoundPlayer 类不适合用于此目的?

首先加载.wav文件:

System.Media.SoundPlayer flyUp = new System.Media.SoundPlayer(@"flyUp.wav");

然后在 KeyDown 事件中,播放它:

private void frmMain_KeyDown(object sender, KeyEventArgs e)
        {
            switch (gameState)
            {
                case GameState.game:
                    if (e.KeyCode == Keys.Space)
                    {
                        flyUp.Play();
                        iGravity = -3;
                    }
                    
                    if (e.KeyCode == Keys.Escape)
                    {
                        this.Close();
                    }
                    break;

                case GameState.gameover:
                    if (e.KeyCode == Keys.Enter)
                    {
                        gameState = GameState.reload;
                    }

                    if (e.KeyCode == Keys.Escape)
                    {
                        this.Close();
                    }
                    break;

                case GameState.reload:
                    Reload();
                    break;
            }
        }

【问题讨论】:

    标签: c# audio


    【解决方案1】:

    您是否尝试过使此处理程序异步? 就这样-

    private async void frmMain_KeyDown(object sender, KeyEventArgs e)
        {
            switch (gameState)
            {
                case GameState.game:
                    if (e.KeyCode == Keys.Space)
                    {
                        flyUp.Play();
                        await Task.Delay(3000) //whatever length of audio is
                        iGravity = -3;
                    }
                    .
                    .
                    .
    
            }
        }
    

    您可以在文档中找到更多详细信息- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

    【讨论】:

    • 没用。将“await Task.Delay(1000); 放在 if 语句之后,我得到了更好的结果,但仍然不理想。尤其是当您按住“空格键”时。
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2012-11-05
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多