2014-01-16 70 views
0

我只想讓這個模子滾動一次,但是當我點擊空間時它會滾動50次。怎麼了!?這個模具爲什麼會滾動多次?

while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit(); sys.exit() 
     pygame.display.update() 
     if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
      diceRoll = random.randint(1, 4) 
      diceRollLabel = myFont.render(str(diceRoll), 1, black) 
      window.blit(diceRollLabel, (580, 35)) 
      print("Dice roll test", diceRoll) 
      pygame.display.update() 

下面的代碼,因爲它最初發布:

while True: 
for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     pygame.quit(); sys.exit() 
pygame.display.update() 
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
    diceRoll = random.randint(1, 4) 
    diceRollLabel = myFont.render(str(diceRoll), 1, black) 
    window.blit(diceRollLabel, (580, 35)) 
    print("Dice roll test", diceRoll) 
    pygame.display.update() 
+1

你把空格鍵放下嗎? – JeremyFromEarth

+1

請修正您的帖子中的縮進。正如所寫,它不會運行。至少有一種可能的方式來縮進它以使其運行會導致你看到的問題。 – abarnert

+1

我不認爲有人應該試圖解決OP的縮進問題。我很確定不正確的縮進是真正的問題,所以改變他發佈的內容隱藏了相關信息。 – abarnert

回答

2

張貼,你的代碼只會引發IndentationError並拒絕運行。所以大概你的真實代碼的縮進方式不同。最有可能是這樣的:

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit(); sys.exit() 
    pygame.display.update() 
    if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
     diceRoll = random.randint(1, 4) 
     diceRollLabel = myFont.render(str(diceRoll), 1, black) 
     window.blit(diceRollLabel, (580, 35)) 
     print("Dice roll test", diceRoll) 
     pygame.display.update() 

而不是檢查event.type == KEYDOWN每個事件的,你經歷的所有事件,然後檢查上次事件是否看到了event.type == KEYDOWN。在有新事件發生之前,每次通過外部循環時,最後一個事件仍將是空間KEYDOWN


如果是這樣的問題,解決它,你只需要把iffor循環中。你大概想要update在那裏。所以:

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit(); sys.exit() 
     pygame.display.update() 
     if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
      diceRoll = random.randint(1, 4) 
      diceRollLabel = myFont.render(str(diceRoll), 1, black) 
      window.blit(diceRollLabel, (580, 35)) 
      print("Dice roll test", diceRoll) 
      pygame.display.update() 

一個原因,許多新手有缺口的問題,像這樣的是,他們正在使用的編輯器,允許它們混合製表符和空格,並讓他們沒有辦法將兩者區分開來,像記事本或TextEdit。如果是這種情況,你真的很想找到幾乎任何其他編輯器。另外,您可以使用-tt標誌運行Python,如果您在代碼中混合了製表符和空格,將會出現錯誤,從而更容易發現隱形問題。