避免在每个帧中创建字体对象。
根据应用程序循环之前的大小创建字体。例如:
font30 = pygame.font.SysFont("corbel", 30)
def write(font, writing, color, x, y):
text = font.render(writing, True, color)
D.blit(text, (x, y))
def print_stats():
write(font30, f"Red player's hp {player2.hp}", (200, 50, 50), 10, 10)
write(font30; f"Green player's hp {player1.hp}", (50, 200, 50), 10, 60)
这并不能解决文本在每一帧中渲染的问题。如果仍然滞后,那么您必须渲染一次文本表面,当player1.hp
分别player2.hp
被改变了。例如:
class Player:
def __init__(self, color, name):
self.color = color
self.name = name
# [...]
def ChangeHp(self, val):
self.hp += val
self.hptext = font30.render(f"{self.name} player's hp {self.hp}", True, self.color)
D.blit(player1.hptext, (10, 60))