在PyGame中高效处理文本

时间:2013-05-28 14:18:38

标签: 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.

然后在事件处理中,我只是blit变量:

while running:
screen.blit(SomeClass().text1,(x, y))

注意:myfont是pygame.font.SysFont(...)

结果:帧率从> 29(限制为30)下降到大约20到22。

第二种方法:

将文本字符串存储在类变量中并在blitting之前进行渲染。

class SomeClass():
    def __init__(self):
        self.text1 = "Text 1 string"
        self.text2 = "Text 2 string"

然后在blitting之前渲染:

while running:
    #more code
    screen.blit(SomeClass().myfont.render(SomeClass().text1,0,SomeClass().colour)

结果:帧速率可比较下降

第三种方法:

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

所以问题仍然存在:有没有办法有效地处理PyGame中的文本,或者它总是更好的解决方案来制作图片?我是否只是不理解PyGame中文本处理的基本规则?我忽视了什么吗?

你如何处理Py-Games中的文本?

提前感谢所有意见和建议;)

帕特里克

1 个答案:

答案 0 :(得分:0)

您可以缓存文本渲染。试试这个演示:Render anti-aliased text on transparent surface in pygame

如果脏的话,它只会重新渲染。 (使用属性更改.text.aa)。

编辑:您可能对更新的GUI模块http://program.sambull.org/sgc/感兴趣了。