为什么这个模具要滚动多次?

2024-04-30 02:42:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想让这个骰子滚动一次,但当我击中太空时,它会滚动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()

以下是最初发布的代码:

^{pr2}$

Tags: ineventtrueforgetiftypedisplay
1条回答
网友
1楼 · 发布于 2024-04-30 02:42:23

如前所述,您的代码只会引发一个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也在里面。所以:

^{pr2}$

许多新手遇到这种缩进问题的一个原因是,他们使用的编辑器允许他们混合制表符和空格,而且没有办法区分这两者,比如记事本或TextEdit。如果是这样的话,你真的想找到几乎任何其他的编辑器。另外,可以使用-tt标志运行Python,如果在代码中混合使用制表符和空格,则会出现错误,从而更容易发现不可见的问题。在

相关问题 更多 >