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. Я запускаю python через MSVC и устанавливаю Pygame через View> Other Windows> Python Environments.. Я не могу заставить шрифты работать. Я следую учебнику, пытаясь извлечь из него уроки, и даже скопировал код, который работал для создателя учебника, и получил ту же ошибку. Может кто-то указать мне верное направление?
BTW... его не полный код.. я вырезал много вещей, которые не имеют отношения к шрифту.. переменные, такие как ширина, экран и т.д., Являются допустимыми переменными со всем кодом. FONT_NAME определяется как "calibri" в settings.py, который импортируется с полным кодом.
Учебник, за которым вы следите, выглядит не очень хорошо, несколько вещей:
pg.font.init()
если вы выполняете pg.init()
(docs)self.font_name = pg.font.match_font('calibri')
а затем pg.font.Font(self.font_name, size)
. Просто используйте SysFontself.all_sprites
? Вы используете его в draw
но я не вижу, где инициализируется.new()
сбрасывает игру, это не имеет смысла называть ее в игровом цикле. Кроме того, если new()
сбрасывает игру, почему она вызывает функции draw?mixer
для звуков. Если вы не собираетесь воспроизводить звук, нет необходимости его инициализировать. Кроме того, если вам не нужна звуковая задержка, вы должны инициализировать ее перед pg.init()
и использовать mixer.pre_init()
и mixer.init()
show_go_screen
отсутствует метод show_go_screen
:/fill
не принимает (0,0,0), он должен быть ((0,0,0)) для черного.draw_text
"белый" не является цветом, это переменная. (255,255,255)
этого вы должны использовать (255,255,255)
.После всего этого: Ошибка, которую я имею, - это функция заполнения, а не шрифт.
После его исправления у меня есть ошибка из тех недостающих переменных/методов, которые я указал ранее.
После исправления всего этого. У меня нет никаких ошибок.
Если вы знаете испанский язык, у меня есть репо с основами pygame https://github.com/Patataman/PythonBasic/tree/master/frameworks/pygame. Если нет, ну, может быть, вы можете выяснить xD
pygame.error: font not initialized
. Pygame не инициализируется, потому что вы забыли здесь скобкиpg.init()
. Проверьте, если это исправит вашу ошибку. Если это все еще не работает, вам нужно опубликовать минимальный, полный и проверяемый пример .