【问题标题】:Pygame exit game and take inputPygame 退出游戏并接受输入
【发布时间】:2014-12-31 09:42:57
【问题描述】:

我在 Pygame 中的游戏遇到了一些问题。如果单击,我希望 Windows 右上角的十字退出游戏。但它似乎不起作用。我还希望它从空格键中获取输入并掷骰子。

diceRoll = random.randint(1, 4)

while True:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.KEYDOWN:
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.key == pygame.K_SPACE:
                diceRoll

其余的代码都在这个之下,但是当我用这个循环时屏幕变黑了。

【问题讨论】:

  • 向我们展示你的主循环。
  • 尝试休息一下,而不是sys.exit()。您也可以在循环之后向下移动pygame.quit(),以便在循环完成时执行它。
  • @MarcusMøller A break 只会退出内部 for 循环,不会退出外部 while 循环。
  • 没错。他应该使用布尔值(program_running 作为示例)执行主循环,并在退出时将其设置为 false。

标签: pygame


【解决方案1】:

要告诉 PyGame 正确退出,你必须这样做

if event.type == pygame.QUIT:
    pygame.quit()
    # perhaps force a quit using sys.exit()

如果你在一个循环中,你也应该打破这个循环,使用break

对于空格键事件,您已经完成了一半。

if event.key =0 pygame.K_SPACE:
    roll_dice()

【讨论】:

  • 谢谢,但是当我使用循环执行此操作时,我的整个程序都会变黑,所以我什么也看不到
  • 考虑在pygame.quit() 之后使用sys.exit(),或者至少向我们展示你的循环。
  • @user3099728 你所有的代码都应该在while True 块下!我怀疑这是程序挂起的原因。
  • 这通常很好。 while 1 是一回事,根本不会造成任何问题。
【解决方案2】:

您的第一个if 声明犯了一个很大的错误。您应该使event.type 行彼此对齐。你正在这样做:

if event.type == pygame.KEYDOWN:
    if event.type == pygame.QUIT:

什么时候你应该这样做:

if event.type == pygame.QUIT:
    pygame.quit()
    sys.exit()
elif event.type == pygame.KEYDOWN:
    pass #Put your other code here

第二个错误是您绝不pygame.quit 放入了while 循环。它将退出游戏/使屏幕上什么都没有,并使您的程序发疯。 安全退出程序在循环中的唯一合乎逻辑的方法是使用sys.exit()。所以你的新while循环应该是:

while True:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                print 'diceRoll' #Doing diceRoll alone won't do anything
pygame.quit() #This is the proper location of this function

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多