2015-07-07 3 views
0

Так что недавно я работал над проектом с pygame, и я начал работать над своим персонажем, которым вы могли управлять. Плеер может перемещаться с помощью клавиш со стрелками, но не может останавливаться, когда клавиши не нажимаются. Мое решение было для pygame протестировать, если пользователь не нажимает влево, вправо, вверх или вниз, тогда скорость игроков будет равна нулю. Но по какой-то причине, когда у меня нет и клавиши нажали, скорость игрока все равно не прекращается. Мне интересно, что не так с моим утверждением if. Спасибо, что прочитали это и помогли!pygame - Входы ключа не работают, если не синтаксис

если заявление кода заключается в следующем:

  if event.key != K_LEFT and event.key != K_RIGHT and event.key != K_DOWN and event.key != K_UP: 
       playerSpeed = 0 

Это полный код Movment:

  #Keypress-player movement 

     elif event.type == KEYDOWN: 
      if event.key != K_LEFT and event.key != K_RIGHT and event.key != K_DOWN and event.key != K_UP: 
       playerSpeed = 0 
      if event.key == K_LEFT: 
       direction = LEFT 
       playerSpeed = .2 
      elif event.key == K_RIGHT: 
       direction = RIGHT 
       playerSpeed = .2 
      elif event.key == K_DOWN: 
       direction = DOWN 
       playerSpeed = .2 
      elif event.key == K_UP: 
       playerSpeed = .2 
       direction = UP 

    if direction == UP: 
     if canMoveUp == 'true': 
      newPlayer = {'x':coords[0]['x'], 'y':coords[0]['y']-playerSpeed} 
    elif direction == DOWN: 
     if canMoveDown == 'true': 
      newPlayer = {'x':coords[0]['x'], 'y':coords[0]['y']+playerSpeed} 
    elif direction == LEFT: 
     if canMoveLeft == 'true': 
      newPlayer = {'x':coords[0]['x']-playerSpeed, 'y':coords[0]['y']} 
    elif direction == RIGHT: 
     if canMoveRight == 'true': 
      newPlayer = {'x':coords[0]['x']+playerSpeed, 'y':coords[0]['y']} 

ответ

1

Вам необходимо полностью пересмотреть свой подход. Есть два хороших способа ввода ввода на основе клавиш.

1) У вас есть флаг для каждой клавиши, установите его на KEYDOWN и отключите его в KEYUP.

2) Используйте словарь ключей в настоящее время, который предоставляет Pygame.

Тогда вы можете сказать что-то вроде «если клавиши [« UP »]:«. Это позволяет вам использовать более одного ключа за раз и делает логику проще.

+0

Спасибо за ваш ответ! У меня есть еще один вопрос: как выглядит код для варианта 2? Еще раз спасибо! –

+0

Ну, я бы не согласился с тем, что с * значком для каждого ключа, установите его на KEYDOWN и отключите его в KEYUP *, это * хороший * подход. В большинстве случаев вы хотите использовать подход номер 2 :-) – sloth

+0

Команда get_pressed(), которая возвращает словарь каждого ключа, индексированного по имени ключа. (например, K_LEFT). Затем вам нужен код типа «Если ключи [K_LEFT]: # перемещение влево. – user3757614

Смежные вопросы