【问题标题】:Is there a way to change what text is displayed after 1 second in Pygame?有没有办法改变 Pygame 1 秒后显示的文本?
【发布时间】:2021-10-31 08:58:42
【问题描述】:

我正在开发一款游戏,但需要一些帮助来更改 Pygame 屏幕上显示的文本。对于任何想知道的人,我使用的是 Python 3。我一定忽略了一些明显的缺陷,但我似乎无法指出它。无论如何,我的代码如下所示:

import pygame, sys, time
from pygame.locals import *

pygame.init()

text1 = "text 1"
text2 = "text 2"
displaytext = ""

#screen
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("text test")

font = pygame.font.SysFont("None", 24)
text = font.render(str(displaytext), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (300, 250)

while True:
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_SPACE:
                displaytext = text1
                time.sleep(1.5)
                displaytext = text2
                
    text = font.render(str(displaytext), True, (255,255,255))
    
    screen.blit(text, (textRect))
    pygame.display.update()

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    使用计时器事件。见pygame.time.set_timer()

    定义一个用户事件(见pygame.event):

    my_event = pygame.USEREVENT + 1
    

    按下 SPACE 时启动计时器:

    if event.type == KEYDOWN:
        if event.key == K_SPACE:
            displaytext = text1
            text = font.render(str(displaytext), True, (255,255,255))
            pygame.time.set_timer(my_event, 1000)
    

    收到定时器事件后,更改文本并停止定时器:

    if event.type == my_event:
        displaytext = text2
        text = font.render(str(displaytext), True, (255,255,255))
        pygame.time.set_timer(my_event, 0)
    

    完整示例:

    import pygame, sys, time
    from pygame.locals import *
    
    pygame.init()
    
    text1 = "text 1"
    text2 = "text 2"
    displaytext = ""
    
    #screen
    screen = pygame.display.set_mode((600, 500))
    pygame.display.set_caption("text test")
    
    font = pygame.font.SysFont("None", 24)
    text = font.render(str(displaytext), True, (255,255,255))
    textRect = text.get_rect()
    textRect.center = (300, 250)
    
    my_event = pygame.USEREVENT + 1
    
    while True:
        screen.fill((0,0,0))
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                if event.key == K_SPACE:
                    displaytext = text1
                    text = font.render(str(displaytext), True, (255,255,255))
                    pygame.time.set_timer(my_event, 1000)
            if event.type == my_event:
                displaytext = text2
                text = font.render(str(displaytext), True, (255,255,255))
                pygame.time.set_timer(my_event, 0)
               
        screen.blit(text, (textRect))
        pygame.display.update()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多