2014-12-05 7 views
0

В моем коде я хочу переместить объект, пока клавиша нажата и остановится при отпускании клавиши. Однако он перемещается только на один шаг, даже когда я удерживаю нажатой клавишу. Вот пример кода. Я напечатал значения (x, y). Любое предложение? Благодарю.Выполнение цикла до нажатия клавиши в pygame

x = 20 
y = 20 

def keydown(evt): 
     global x, y 
     if evt.type == pygame.KEYDOWN: 
       if(evt.key == pygame.K_RIGHT): x += 2.0 
       if(evt.key == pygame.K_LEFT): x -= 2.0 
       if(evt.key == pygame.K_UP): y += 2.0 
       if(evt.key == pygame.K_DOWN): y -= 2.0 
     if evt.type == pygame.KEYUP: 
       if(evt.key == pygame.K_RIGHT or evt.key == pygame.K_LEFT): x = x 
       if(evt.key == pygame.K_UP or evt.key == pygame.K_DOWN): y = y 


while True: 
     for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
         pygame.quit() 
         sys.exit() 

       print(x, y) 
       keydown(event) 

PS: Я попробовал это, как писал где-то в этом форуме (How can I make a sprite move when key is held down), но без успеха.

keys = pygame.key.get_pressed() 
if keys[pygame.K_RIGHT]: x += 2.0 
if keys[pygame.K_LEFT]: x -= 2.0 
if keys[pygame.K_UP]: y += 2.0 
if keys[pygame.K_DOWN]: y -= 2.0 

ответ

0
x = 20 
y = 20 

def keydown(evt): 
     global x, y 
     if(evt[pygame.K_RIGHT]): x += 2.0 
     if(evt[pygame.K_LEFT]): x -= 2.0 
     if(evt[pygame.K_UP]): y += 2.0 
     if(evt[pygame.K_DOWN]): y -= 2.0 


while True: 
     keys = pygame.key.get_pressed() 
     event = pygame.event.poll() 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     print(x, y) 
     keydown(keys) 

поэтому сначала от вас был какой-то код, который никогда не был делать что-либо в вашей функции KeyDown

if evt.type == pygame.KEYUP: 
    if(evt.key == pygame.K_RIGHT or evt.key == pygame.K_LEFT): x = x 
    if(evt.key == pygame.K_UP or evt.key == pygame.K_DOWN): y = y 

pygame.key.get_press() возвращает словарь, который отображает pygame.KEY_ * *** для boolean. итерация через это даст вам только логические значения, которые вам не подходят. код, который я написал вместо этого, будет работать, постоянно получая все нажатые клавиши и изменяя ваши X и Y на основе нажатия или отсутствия определенных клавиш.

если у вас есть еще вопросы, не стесняйтесь спрашивать, надеюсь, что это помогло!

Если это еще не работает, отправьте сообщение об ошибке

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