Работа с событиями

Нажатие на крестик

Есть в любой программе на pygame. Все просто.

  for event in pygame.event.get():
      if event.type == pygame.QUIT:
          running = False

Дальше предполагается, что мы уже проходимся по собятиям в цикле for event in pygame.event.get:

Нажатие на кнопки

  if event.type == pygame.KEYDOWN:
      if event.key == pygame.K_UP:
          vel_y = vel_y - 10
      if event.key == pygame.K_DOWN:
          vel_y = vel_y + 10

На что стоит обратить внимание.

  • Это проверка именно на cобытие нажатия а не "держания" клавиши, то есть сколько бы вы не держали нажатой клавишу, скорость изменится только 1 раз. Чтобы реагировать на постоянно зажатую кнопку, нужно делать немного иначе.

  • pygame.KEYDOWN- это тип события (нажатие на кнопку)

  • pygame.K_DOWN, pygame.K_UP- "ключи" события (event.key)

Коды кнопок

Полный список здесь. Те которые вам могут пригодиться:

  • K_UP, K_DOWN, K_RIGHT, K_LEFT- стрелки

  • K_SPACE- пробел

  • K_w, K_a, K_s, K_d - кнопки w a s d

Клик мышкой

if event.type == pygame.MOUSEBUTTONDOWN:
    if event.button == 1:  #  левая кнопка мыши
        bird_pos = event.pos
    if event.button == 3:  # правая кнопка мыши
        bird_image = new_image
  • Определить какая кнопка была нажата на мышке можно используя значение event.button:

    1 - left click
    2 - middle click
    3 - right click
    4 - scroll up
    5 - scroll down

  • Координаты нажатия находятся в event.pos.

Движение мышки

Не только нажатие, но и движение мышки тоже является событием. Действительно, что если нам нужно чтобы какой нибудь объект постоянно следил за курсором? Нужно запускать его движение тогда когда мышка движется.

Координаты хранятся также как и в предыдущем случае - в переменной event.pos.

if event.type == pygame.MOUSEMOTION:
    cursor_pos = event.pos

Как проверить зажата ли клавиша?

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

if pygame.key.get_pressed()[pygame.K_RIGHT]:
    x = x + 1

Работает это так: функция

pygame.key.get_pressed()

возвращает словарь вида

{ 
  pygame.K_UP: True,
  pygame.K_DOWN: False,
  pygame.K_RIGHT: True,
  pygame.K_LEFT: False,
  ...
}

Пример

results matching ""

    No results matching ""