等待按键,然后再继续进行Pygame

时间:2018-08-14 04:25:53

标签: python pygame

我希望我的程序在每个播放器中循环播放,而这段代码可以做到这一点。但是,在最后一个播放器上,它将显示信息,然后立即将其清除。我希望它在清除屏幕之前等待用户按下按键(例如空格或Enter)。我尝试使用event = pygame.event.wait()实现此功能,但是现在我的程序在到达该声明时才挂起。

players = {}
            for player in range(1, int(num_players)+1):
                name = ask(DISPLAYSURF, "Player " + str(player) + "'s name")
                player_roll = None
                while player_roll is None:
                    for event in pygame.event.get():
                        if event.type == pygame.KEYDOWN:
                            pygame.event.clear()
                            while event.type != pygame.KEYDOWN:
                                event = pygame.event.wait()
                                DISPLAYSURF.fill(WHITE)
                                FIRST_DICE = roll_a_dice()
                                SECOND_DICE = roll_a_dice()
                                player_roll = FIRST_DICE + SECOND_DICE
                                players[name] = player_roll
                                display_dice(FIRST_DICE, SECOND_DICE)
                                our_roll(name)

我的完整代码在这里:https://github.com/Legitimate/Street-Dice/blob/master/main.py

以下是该问题的视频:https://youtu.be/ChxZq0bY4wk

2 个答案:

答案 0 :(得分:1)

花了几分钟时间来理解你的意思,但是在重构了以下代码所示的播放器列表之后,其余的滚动了起来:https://github.cm/rebelclause/python_legs/blob/master/pygame/roll_the_dice.py。如果对您有用,请给我买啤酒;)

players = {'you': {'rolltotal': None, 'otherstuff': None }, 'me': {'rolltotal': None, 'otherstuff': None}}

def reviewvals():
    print('Number of players: ', len(players)) # only counts the primary keys, the players                
    for player, attribdict in players.items():
        for key, value in attribdict.items():
            print(player, key, value)

reviewvals()

答案 1 :(得分:0)

我以前没有使用过Pygame,所以我不知道是否有更高效/或更正确的方式来完成您所要的操作,但是无论如何请尝试一下

检查一下 Pygame waiting the user to keypress a key

同样来自docs-这就是为什么您的程序没有响应(看起来好像被挂起/卡住了,但是没有)..当它到达event.wait()时 https://www.pygame.org/docs/ref/event.html#comment_pygame_event_wait

pygame.event.wait()     等待队列中的单个事件     wait()-> EventType实例

从队列中返回一个事件。如果队列为空,此函数将等待直到创建一个。返回事件后,该事件将从队列中删除。在程序等待时,它将以空闲状态进入睡眠状态。这对于想要与其他应用程序共享系统的程序很重要。