2015-10-21 22 views
3

只要按鍵盤上的key,我就會嘗試製作遊戲object(這裏是歡迎文本)。但是在這個代碼礦,只要按下按鍵,我如何讓遊戲對象持續移動?

import pygame , sys 
from pygame.locals import * 

pygame.init() 

WHITE = (255 , 255 , 255) 
RED = (255 , 0 , 0) 

DISPLAYSURF = pygame.display.set_mode((800 , 400)) 
pygame.display.set_caption('Welcome Tanks') 

#render(text, antialias, color, background=None) 
fontObj = pygame.font.SysFont('serif' , 40) 
text = fontObj.render('Welcome Folks' , True , RED) 

x = 150 
y = 29 

while True: 
    DISPLAYSURF.fill(WHITE) 
    DISPLAYSURF.blit(text ,(x , y)) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit(0) 
     elif event.type == KEYDOWN or event.type == KEYUP: 
      if event.key == K_ESCAPE: 
       pygame.quit() 
       sys.exit(0) 
      elif event.key == K_DOWN:    
       y += 15 
      elif event.key == K_UP: 
       y -= 15 
      elif event.key == K_RIGHT: 
       x += 14 
      elif event.key == K_LEFT: 
       x -= 15 
      else: 
       x = 150 
       y = 29 
    pygame.display.update() 

對象移動時只有一次,即使key持續按壓很長一段時間。換句話說,當按下鍵盤按鈕時,對象只改變其位置一次。我希望它在持有鑰匙的同時不斷移動。

我應該尋找哪個事件而不是event.KEYDOWN

回答

2

我建議你使用key.get_pressed(),例如

while True: 
    DISPLAYSURF.fill(WHITE) 
    DISPLAYSURF.blit(text ,(x , y)) 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit(0) 
     elif event.type == KEYDOWN or event.type == KEYUP: 
      if event.key == K_ESCAPE: 
       pygame.quit() 
       sys.exit(0) 

    if pygame.key.get_pressed()[K_LEFT]: 
     x -= 15 

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

    if pygame.key.get_pressed()[K_UP]: 
     y -= 15 

    if pygame.key.get_pressed()[K_DOWN]: 
     y += 15 
    pygame.display.update() 

pygame.key.get_pressed()

返回表示鍵盤上的每個 鍵的狀態的布爾值的序列。使用鍵常量值來索引數組。 A 真值表示該按鈕被按下。

使用此功能獲取按下按鈕的列表不是用於處理來自用戶的文本輸入的正確方式。您無法知道 按下按鍵的順序,並且在兩次調用pygame.key.get_pressed()之間沒有注意到迅速按下的按鍵可以完全變爲 。也有 沒有辦法將這些推送的密鑰翻譯成完全翻譯的 字符值。查看事件隊列中的pygame.KEYDOWN事件 此功能。

您也可以看看doc

+2

謝謝兄弟!但是能否請你解釋一下get_pressed()函數,並且它告訴我們關鍵變量沒有被定義。 –

+0

試試這個'from pygame.locals import *',或者'pygame.key.get_pressed()' – AndreL

+0

哦,是的!我現在明白了一切。感謝芽! –

2
keyState = pygame.key.get_pressed() 

聲明,然後使用keystate:

if KeyState()[K_DOWN]: 
     y += 15 

你可以嘗試:

if key.get_pressed() 
    down = True 

while down = True: 
    y+= 15 

然後得到FPS時鐘,所以它不僅僅是fl超過screen