【问题标题】:pygame font Attribute errorpygame字体属性错误
【发布时间】:2018-07-29 23:10:22
【问题描述】:
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 并通过 View > Other Windows > Python Environments 安装 Pygame .. 我似乎无法让字体工作。我正在关注一个试图从中学习的教程,甚至复制粘贴了适用于教程创建者的代码并得到相同的错误。谁能指出我正确的方向?

顺便说一句……它不是整个代码……我删掉了很多与字体无关的东西……宽度、屏幕等变量都是整个代码的有效变量。 FONT_NAME 在 settings.py 中定义为 'calibri' ,它与整个代码一起导入..

【问题讨论】:

  • 我得到一个不同的错误(在添加缺少的变量之后)pygame.error: font not initialized。 Pygame 未初始化,因为您忘记了pg.init() 此处的括号。检查是否可以解决您的错误。如果还是不行,需要发minimal, complete and verifiable example
  • 它在我的整个代码中.. 我只是在帖子中意外省略了它.. 让我编辑以反映这一点,以免造成混淆.. 在 MSVC 中我仍然存在同样的错误
  • 感谢 skrx 的回复...我编辑了代码以反映我的错误重复
  • 我无法重现该错误。尝试从命令行运行程序。并请发布完整的回溯(错误消息)。
  • 这个错误似乎是 MSVC 独有的,所以我认为我为那个 IDE 安装 pygame 的方式有问题。所以我不知道该怎么想。我在不同的 IDE(Atom 1.28.2)中尝试过,它按预期工作

标签: python pygame


【解决方案1】:

您所遵循的教程看起来不太好,有几点:

  • 如果你做pg.init(),你不需要做pg.font.init() (docs)
  • 如果您要使用 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 基础知识的 repo。如果没有,好吧,也许你可以弄清楚xD

【讨论】:

  • 教程很好..我拿出了很多东西并改变了很多东西,以使其尽可能简约,并专注于错误本身。没有声音YET .. 0,0,0 是我的错误等等。最后,我没有很好地解释我的问题是什么。所有缺少的东西都在我的整个代码中。我只是想把与字体无关的东西拿出来。我失败了。
  • Aaaaaahhh 这改变了很多 xD。我忘了提,但我用 Pygame 1.9.4 对其进行了测试,修复这些问题后我没有任何问题......也许问题出在你代码的其他地方
  • 我使用了 Atom 1.28.2 并且它有效.. 所以它最终成为了我的 MSVC IDE...我显然没有在那个 IDE 上完全安装 pygame.. 谢谢您的回复: )
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2019-07-04
  • 2021-02-21
  • 1970-01-01
相关资源
最近更新 更多