2014-12-05 63 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_字典* ***布尔人。迭代通过这只会给你布尔,这是没有用的。我写的代码会不断按下所有按键,并根据是否按下某些按键来更改X和Y.

如果您有任何问题随时问,希望这有助于!

如果这仍然不起作用请发布您的错误信息