Как замедлить или остановить нажатие клавиш в XNA - PullRequest
21 голосов
/ 24 мая 2009

Я начал писать игру с использованием XNA Framework и столкнулся с некоторой простой проблемой, которую я не знаю, как решить правильно.

Я отображаю меню с помощью Texture2D и с помощью клавиатуры (или геймпада) я меняю выбранный пункт меню. Моя проблема в том, что текущая функция, используемая для переключения между пунктами меню, слишком быстрая. Я мог бы нажать кнопку «вниз», и она опустится на 5 или 6 пунктов меню (из-за того, что Update () вызывается много раз, таким образом обновляя выбранный элемент).

ex.
(> indicate selected)
> MenuItem1
MenuItem2
MenuItem3
MenuItem4
MenuItem5

I press the down key for just a second), then I have this state:

MenuItem1
MenuItem2
MenuItem3
> MenuItem4
MenuItem5

What I want is (until I press the key again)
MenuItem1
> MenuItem2
MenuItem3
MenuItem4
MenuItem5

То, что я ищу, это способ заставить игрока нажимать клавишу вверх / вниз много раз, чтобы перейти от одного пункта меню к другому, или иметь какое-то минимальное время ожидания перед переходом к следующему пункт меню.

Ответы [ 12 ]

0 голосов
/ 25 мая 2009

Хорошо, я понял это. Сначала я добавил

private Keys keyPressed = Keys.None;

и в моем методе Update () я делаю следующее:

 KeyboardState keyboardState = Keyboard.GetState();

if (keyboardState.IsKeyUp(keyPressed))
{
    keyPressed = Keys.None;
}

if (keyboardState.IsKeyDown(keyPressed))
{
    return;
}

// Some additionnal stuff is done according to direction
if (keyboardState.IsKeyDown(Keys.Up))
{
    keyPressed = Keys.Up;
}
else if (keyboardState.IsKeyDown(Keys.Down))
{
    keyPressed = Keys.Down;
}

Кажется, он работает правильно.

0 голосов
/ 24 мая 2009

Вы можете сохранить в целочисленном значении время от последней нажатой клавиши (влево, вправо ...), и если это время больше некоторого предела, вы можете опросить новую нажатую клавишу. Однако это можно сделать только для меню, потому что в игре вам понадобится эта информация немедленно.

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