Используйте освобождение ключа в библиотеке SFML c # - PullRequest
0 голосов
/ 29 апреля 2018

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

if (Keyboard.IsKeyPressed(Keyboard.Key.A))
{
    values[0] = !values[0];
}
if (Keyboard.IsKeyPressed(Keyboard.Key.S))
{
    values[1] = !values[1];
}
if (Keyboard.IsKeyPressed(Keyboard.Key.D))
{
    values[2] = !values[2];
}

Спасибо

1 Ответ

0 голосов
/ 03 мая 2018

Я думаю, что вы можете использовать Window.KeyPressed и Window.KeyReleased и сохранить, какая клавиша была нажата и отпущена

private Dictionary<Keyboard.Key, bool> keysArePressed = new Dictionary<Keyboard.Key, bool>
{
   {Keyboard.Key.A, false},
   {Keyboard.Key.S, false},
   {Keyboard.Key.D, false}
};

// Key
Window.KeyPressed += OnKeyPressed;
Window.KeyReleased += OnKeyReleased;

public void OnKeyPressed(object sender, KeyEventArgs e)
{
   if (e.Code == Keyboard.Key.A && !keysArePressed[Keyboard.Key.A])
   {
      Console.WriteLine("A pressed");
      keysArePressed[Keyboard.Key.A] = true;
   }
}

public void OnKeyReleased(object sender, KeyEventArgs e)
{
   if (e.Code == Keyboard.Key.A)
   {
      Console.WriteLine("A released");
      keysArePressed[Keyboard.Key.A] = false;
   }
}
...