如何仅在一段时间内显示文字?

时间:2017-05-26 17:11:31

标签: python python-2.7 pygame delay pong

我希望在玩家获胜时在屏幕上显示消息,并让文本显示5秒钟,然后返回主菜单开始屏幕。但是,使用time.delay函数,我的屏幕会暂停,然后在闪光灯中显示文本,然后立即进入开始屏幕。有没有更有效的方法让文本显示足够长的时间才能被阅读?

以下是我用来实际显示消息的功能:

def winnerPlayerOne():
    screen.fill(PINK)
    winnerP1Message = winnerFont.render("Congrats Player 1. You Win!", True, WHITE)
    screen.blit(winnerP1Message, ((400 - (winnerP1Message.get_width()/2)),(300 - (winnerP1Message.get_height()/2))))
    pygame.display.update()
    pygame.time.delay(5000)

    startscreen()

以下是我在主循环中调用此函数的方法:

        if playeroneScore == 5:
            winnerPlayerOne()

        if playertwoScore == 5:
            winnerPlayerTwo()

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

试试pygame.time.wait(5000)。它应该以您期望的方式表现得更好。它确实阻止了在后台运行的任何代码,但这似乎不是你的用例的问题。

答案 1 :(得分:1)

本杰明的回答可能会适用于你的情况。但是如果你想要一些不会影响游戏视觉效果的东西,我会考虑像这样设置一个计时器...

    WITHIN GAME LOOP:
        if gameWonScreen:
            screen.fill(PINK)
            winnerP1Message = winnerFont.render("Congrats Player 1. You Win!", True, WHITE)
            screen.blit(winnerP1Message, ((400 - (winnerP1Message.get_width()/2)),(300 - (winnerP1Message.get_height()/2))))
            timer = timer + elapsed/1000
            elapsed = fpsClock.tick(FPS)
            if timer > timeWinScreen:
                gameWonScreen = false

在应用程序启动时将'timeWinScreen'初始化为所需的消息持续时间,并在玩家获胜时将'timer'设置为'0'并将gameWonScreen设置为'true'。使用elapsed = fpsClock.tick(FPS)将保留自上次滴答以来的时间值。你不需要在这个过程中使用它(你可以只使用FPS的一小部分),但使用'elapsed'是很好的做法,因为它有助于平滑某些对象的动画。

答案 2 :(得分:0)

试试这个: 请记住,在下面的课程中,时间不是您在 pygame 中测量时间的方式。它是主循环中发生的循环次数。

class disp_txt:

    def __init__(self,text,time,destination):
        self.text = text
        self.time = time
        self.destination = destination            
        self.shfnt = pygame.font.SysFont("comicsens",30,False)
        self.shtxt = self.shfnt.render(self.text,0,(255,0,0))
    def show(self,surface):
        if self.time>0:
            surface.blit(self.shtxt,self.destination)
        self.time -= 1
hint = disp_txt("text",100,(100,400)) #example
hint.show(screen)   #in the main loop or where you are drawing