pygame字体属性错误

时间:2018-07-29 23:10:22

标签: python pygame

import sys, pygame as pg, random




class Game:
    def __init__(self):
         #initialize game window, etc
         pg.init()
         pg.font.init()
         pg.mixer.init()
         self.screen = pg.display.set_mode((800, 600))
         pg.display.set_caption('myFirstGame')
         self.running = True
         self.font_name = pg.font.match_font('calibri')


    def new(self):
        #resets the game
        self.score = 0
        self.run()

    def run(self):
        #game loop
        self.playing = True
        while self.playing:
            self.draw()


    def draw(self):
         #game loop draw
         self.screen.fill(0, 0, 0)

         self.all_sprites.draw(self.screen)
         self.draw_text(str(self.score), 22, white, 800 / 2, 20)
         #after drawing everything, flip the display
         pg.display.flip()



    def draw_text(self, text, size, color, x, y):
        font = pg.font.Font(self.font_name, size)
        text_surface = font.render(text, True, color)
        text_rect = text_surface.get_rect()
        text_rect.midtop = (x, y)
        self.screen.blit(text_surface, text_rect)

 g = Game()
 while g.running:
     g.new()
     g.show_go_screen()

 pg.quit()

因此,我正在按照教程进行操作,并且遇到此错误...

AttributeError:模块'pygame.font'没有属性'match_font'

我认为错误与pygame的安装有关。我通过MSVC运行python,并通过“视图”>“其他Windows”>“ Python环境”安装了Pygame。.我似乎无法使字体正常工作。我正在跟踪一个教程,尝试从中学习,甚至复制粘贴了对教程创建者有用的代码,并得到相同的错误。谁能指出我正确的方向?

顺便说一句...它不是整个代码。.我删去了很多与字体无关的内容。.例如宽度,屏幕等变量在整个代码中都是有效变量。 FONT_NAME在settings.py中定义为“ calibri”,并与整个代码一起导入。

1 个答案:

答案 0 :(得分:1)

您要遵循的教程看起来不太好,有两件事:

  • 如果您执行pg.font.init()docs),则无需执行pg.init()
  • 如果您要使用Sysfont(例如calibri),则不需要先进行self.font_name = pg.font.match_font('calibri'),然后再进行pg.font.Font(self.font_name, size)。只需使用SysFont
  • self.all_sprites的定义在哪里?您在draw中使用了它,但看不到初始化的位置。
  • 如果new()重设了游戏,则在游戏循环中调用它没有多大意义。另外,如果new()重设了游戏,为什么还要调用绘制函数?
  • mixer用于声音。如果您不想播放任何声音,则无需初始化。另外,如果您不想延迟声音,则必须在pg.init()之前使用mixer.pre_init()mixer.init()
  • 对其进行初始化。
  • show_go_screen方法也丢失了:/
  • fill方法未收到(0,0,0),对于黑色应该为((0,0,0))。
  • draw_text方法中,“白色”不是颜色,而是变量。您应该改用(255,255,255)

所有这些之后:我的错误来自填充函数,而不是字体。

修复它后,我之前指出的缺失变量/方法出现了错误。

解决所有这些问题之后。我没有任何错误。

如果您知道西班牙语,那么我会回购pygame https://github.com/Patataman/PythonBasic/tree/master/frameworks/pygame的基础知识。如果没有,也许您可​​以找出xD