Кнопка Shoot в игре срабатывает несколько раз, а не один раз при нажатии пробела

Я делаю очень простую игру в стиле spaceinvaders. В настоящее время у меня есть метод огня, настроенный для ответа на пробел, например:

case VK_SPACE:
tank.Fire();
break;

И метод огня, при котором пули за пределами экрана появляются позади танка, а затем стреляют в них вверх.

void Tank::Fire() {
//Moves bullets to behind tank.
bullets[bulletCount].SetPos(Vector2D (tank_pos.x+20, tank_pos.y+20));

//Sets their speed vector in motion.
bullets[bulletCount].SetSpeed(Vector2D (0, -350));
bulletCount++; //Increment the current bullet to be used.
}

Проблема в том, что один удар по пробелу срабатывает больше, чем по одному за раз. Как можно было бы гарантировать, что только один огонь на пресс?

0

Решение

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

2

Другие решения

В настоящее время ваш код, вероятно, выполняет что-то вроде «стреляйте, пока пробел нажат». То, что вы хотите, это «нажать, если пробел был нажат, но кадр не был нажат раньше».

Таким образом, в основном, вы должны сохранить состояние пространства от кадра к кадру и проверить, было ли пространство нажато или нет ранее.

1

По вопросам рекламы [email protected]