我只希望这个模具滚动一次,但是当我击中太空时它会滚动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()
答案 0 :(得分: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
。
如果这是问题,要修复它,您只需将if
放在for
循环中。你可能也希望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()
许多新手有这样的缩进问题的一个原因是他们使用的编辑器允许他们混合制表符和空格,并且无法区分两者,如Notepad或TextEdit。如果是这种情况,你真的想找到几乎任何其他编辑器。此外,您可以使用-tt
标志运行Python,如果在代码中混合使用制表符和空格,则会出现错误,从而更容易发现不可见的问题。