如何编写Pygame单行文本渲染函数?解决TypeError问题
问题原因与修复方案
你遇到的TypeError: argument 1 must be pygame.Surface, not None错误,根源在于write_text函数没有返回值——你在函数里调用了font.render生成文本Surface,但没有用return把这个Surface返回出来,函数默认会返回None,而screen.blit要求第一个参数必须是有效的pygame.Surface对象,所以报错了。
下面提供两种符合你需求的修复方式:
方式一:让函数返回渲染好的Surface
修改write_text函数,添加return语句返回渲染后的Surface,这样可以继续用screen.blit调用:
def write_text(text, anti_alias, colour): return font.render(text, anti_alias, colour)
原调用代码不需要修改,依然可以正常运行。
方式二:函数直接完成渲染+绘制(更贴合“一行操作”需求)
把screen.blit的逻辑整合到函数里,调用时直接传入位置参数,一行代码完成所有操作:
# 修改后的函数,新增pos参数接收绘制位置 def write_text(text, anti_alias, colour, pos): text_surface = font.render(text, anti_alias, colour) screen.blit(text_surface, pos) # 游戏循环里直接调用这一行即可,不需要再写screen.blit write_text('haloooo', False, (200, 200, 200), (100, 300))
内容的提问来源于stack exchange,提问作者Spirula
相关产品推荐
相关产品推荐

