(C#) Воспроизведение звука при нажатии клавиши и остановка при повторном нажатии клавиши - PullRequest
0 голосов
/ 14 апреля 2020

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

    public class SCBA
    {
         static string GameDirectory;
         static string soundDirectory;
         static SoundPlayer player;


        public static void InitializeSound()
        {
            player = new SoundPlayer();
            GameDirectory = Directory.GetCurrentDirectory();
            soundDirectory = GameDirectory + "/test/test/test/Audio";
            Game.LogTrivial("Sound Directory located at" + soundDirectory);

            try
            {
                player.SoundLocation = soundDirectory + "/test.wav";
            }
            catch(Exception e)
            {
                string error = e.Message;
                Game.LogTrivial("Sound File located at" + player.SoundLocation);
                Game.LogTrivial(String.Format("Something happened" + error));


            }

        }

        public static void PlaySound()
        {
            try
            {
                player.Play();
            }
            catch (Exception e)
            {
                Game.LogTrivial(e.ToString());
                Game.LogTrivial(String.Format("Something happened", e.Message));

            }
        }
    }

А вот код из моего основного класса, который регистрирует, нажата ли клавиша

        if (Game.IsKeyDown(Settings.SCBA))
        {
            SCBA.PlaySound();
        }

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Определите логическую переменную в вашем основном классе и добавьте StopSound void к вашему SCBA классу.

private bool needPlay = false;
private void test()
{
    if (Game.IsKeyDown(Settings.SCBA))
    {
        needPlay = !needPlay;
        if(needPlay)
           SCBA.PlaySound();
        else
           SCBA.StopSound();
    }
}
0 голосов
/ 14 апреля 2020

Таким образом, вам не нужно менять основной класс

public class SCBA
{
     static string GameDirectory;
     static string soundDirectory;
     static SoundPlayer player;
     private static bool isPlaying;



    public static void InitializeSound()
    {
        player = new SoundPlayer();
        GameDirectory = Directory.GetCurrentDirectory();
        soundDirectory = GameDirectory + "/test/test/test/Audio";
        Game.LogTrivial("Sound Directory located at" + soundDirectory);
        isPlaying = false;

        try
        {
            player.SoundLocation = soundDirectory + "/test.wav";
        }
        catch(Exception e)
        {
            string error = e.Message;
            Game.LogTrivial("Sound File located at" + player.SoundLocation);
            Game.LogTrivial(String.Format("Something happened" + error));


        }

    }

    public static void PlaySound()
    {
        try
        {
            if(isPlaying)
            {
                player.Stop();
            }
            else
            {
                player.Play();
            }

            isPlaying = !isPlaying;
        }
        catch (Exception e)
        {
            Game.LogTrivial(e.ToString());
            Game.LogTrivial(String.Format("Something happened", e.Message));

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...