Text 在PyGame中高效处理文本

Text 在PyGame中高效处理文本,text,pygame,blit,Text,Pygame,Blit,在PyGame中文本的呈现遇到了许多问题之后,我想知道是否有有效的方法来处理它 第一种方法: 将已呈现的文本存储在类self.variables中: class SomeClass(): def __init__(self): self.text1 = myfont.render("Text 1",0,self.colour) self.text2 = myfont.render("Text 2",0,self.colour) #etc.

在PyGame中文本的呈现遇到了许多问题之后,我想知道是否有有效的方法来处理它

第一种方法:

将已呈现的文本存储在类self.variables中:

class SomeClass():
    def __init__(self):
        self.text1 = myfont.render("Text 1",0,self.colour)
        self.text2 = myfont.render("Text 2",0,self.colour)
        #etc.
然后在事件处理中,我只需输入变量:

while running:
screen.blit(SomeClass().text1,(x, y))
注意:myfont是pygame.font.SysFont

结果:帧率从>29降低到约20到22

第二种方法:

只将文本字符串存储在类变量中,并在blitting之前呈现

class SomeClass():
    def __init__(self):
        self.text1 = "Text 1 string"
        self.text2 = "Text 2 string"
然后在光点显示之前渲染:

while running:
    #more code
    screen.blit(SomeClass().myfont.render(SomeClass().text1,0,SomeClass().colour)
结果:可比的帧率下降

第三种方法:

使用GIMP,将文本写入其中,然后将其存储在PNG中。 结果:FPS无明显变化

所以问题依然存在:有没有办法在PyGame中有效地处理文本,还是让它成为图片总是更好的解决方案?我只是不理解PyGame中文本处理的基本规则吗?我忽略了什么吗

你如何处理游戏中的文本

提前感谢所有的意见和建议


Patric

您可以缓存文本渲染。尝试此演示:

只有脏了才会重新渲染。使用属性更改.text或.aa


编辑:您可能对更新的GUI模块感兴趣,了解更多信息。

谢谢!这是一个非常有趣的方法。我要试一试。现在想知道其他事情。。。打印命令不是也消耗了很多CPU吗。。。?在我删除打印FPS的命令后,游戏突然运行得更快了。