Я делаю простую игру, и одной из проблем, с которыми я столкнулся, является досадная задержка при непрерывном нажатии клавиши.
Таким образом, в основном, когда я нажимаю (например, в течение очень длительного времени) Up, мой объект будет двигаться на 1 единицу вверх, а не двигаться (в течение примерно 1 секунды), а затем непрерывно двигаться на 1 единицу вверх (без каких-либо задержек).
В настоящее время я использую это для перемещения объекта (SDL2):
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
//Move object 1 unit up
break;
//Other unrelated things omitted
}
break;
//Omitted other cases
}
}
Я хотел бы убрать задержку, чтобы объект мог сразу же двигаться Upочень быстро. Есть какой-либо способ сделать это?
while key UP is down move 30 units per second
- и в секунду имеет смысл, когда у вас есть измеримое время между нажатием клавиши «вверх» и «вверх» - обычно более одного кадра.Альтернативный способ (подход Джоша тоже великолепен!) - установить логическое значение
SDL_KEYDOWN
и, возможно, игнорировать все повторяющиеся ключевые события. Это вы можете сделать, проверивrepeat
член ключевого события.Тогда вы могли бы реализовать свой собственный таймер, который не должен быть чем-то необычным, и реализовать повторение клавиш самостоятельно. Вы можете запустить действие прямо из таймера или даже сгенерировать
SDL_KEYDOWN
событие и объединить решения.источник