我希望在玩家获胜时在屏幕上显示消息,并让文本显示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()
非常感谢任何帮助!
答案 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