Как вывести текст в pygame
Перейти к содержимому

Как вывести текст в pygame

  • автор:

Модуль pygame.font

Классы Font и SysFont находятся в модуле pygame.font и предназначены для работы со шрифтами и текстом. Чтобы создавать от этих классов объекты, модуль pygame.font необходимо предварительно инициализировать командой pygame.font.init() , или выполнить инициализацию всех вложенных модулей библиотеки Pygame командой pygame.init() .

От классов pygame.font.Font и pygame.font.SysFont создаются объекты-шрифты. Второй класс берет системные шрифты, поэтому конструктору достаточно передать имя шрифта. Конструктору Font надо передавать имя файла шрифта. Например:

pygame.font.SysFont('arial', 36) pygame.font.Font('/адрес/Arial.ttf', 36)

Пример полного адреса в системе Linux – «/usr/share/fonts/truetype/msttcorefonts/Arial.ttf».

Второй аргумент – это размер шрифта в пикселях.

Узнать, какие шрифты есть в системе, можно с помощью функции get_fonts() :

>>> pygame.font.get_fonts() ['cmmi10', 'umeminchos3', 'kacstbook' .

Узнать адрес конкретного шрифта:

>>> pygame.font.match_font('verdana') '/usr/share/fonts/. /Verdana.ttf'

Вы можете скопировать шрифт в каталог программы и обращаться к нему без адреса:

pygame.font.Font('Verdana.ttf', 24)

В pygame есть шрифт по-умолчанию. Чтобы использовать его, вместо имени файла в конструктор надо передать объект None :

pygame.font.Font(None, 24)

От обоих классов ( Font и SysFont ) создаются объекты типа Font .

Метод render() экземпляра Font создает поверхность (экземпляр Surface ), на которой «написан» переданный в качестве аргумента текст, шрифтом, к которому применяется метод. Вторым аргументом указывается сглаживание, третьим – цвет текста. При необходимости четвертым аргументом можно указать цвет фона.

import pygame import sys pygame.font.init() sc = pygame.display.set_mode((300, 200)) sc.fill((255, 255, 255)) f1 = pygame.font.Font(None, 36) text1 = f1.render('Hello Привет', True, (180, 0, 0)) f2 = pygame.font.SysFont('serif', 48) text2 = f2.render("World Мир", False, (0, 180, 0)) sc.blit(text1, (10, 50)) sc.blit(text2, (10, 100)) pygame.display.update() while 1: for i in pygame.event.get(): if i.type == pygame.QUIT: sys.exit() 

Текст в Pygame

Рассмотрим такой пример:

import pygame as pg import sys pg.init() sc = pg.display.set_mode((400, 300)) sc.fill((200, 255, 200)) font = pg.font.Font(None, 72) text = font.render("Hello Wold", True, (0, 100, 0)) place = text.get_rect(center=(200, 150)) sc.blit(text, place) pg.display.update() while 1: for i in pg.event.get(): if i.type == pg.QUIT: sys.exit() pressed = pg.key.get_pressed() if pressed[pg.K_LEFT]: place.x -= 1 elif pressed[pg.K_RIGHT]: place.x += 1 sc.fill((200, 255, 200)) sc.blit(text, place) pg.display.update() pg.time.delay(20)

Центрирование текста в Pygame

Вспомним, что метод get_rect() экземпляра Surface возвращает объект типа Rect , чьи размеры соответствуют размерам поверхности.

Поскольку у самой поверхности нет собственных свойств-координат на родительском окне, а у Rect они есть, то по умолчанию, если get_rect() применяется без аргументов, для его верхнего левого угла устанавливаются координаты (0, 0).

В нашем примере мы передаем в get_rect() значение для свойства center порождаемой прямоугольной области. Это свойство определяет координаты центра экземпляра Rect (то, что это еще и центр главного окна, неважно). При этом остальные координаты, в том числе координаты верхнего левого угла, вычисляются автоматически, исходя из установленного центра и размеров поверхности.

Поэтому, когда вызывается метод blit() , в который в качестве второго аргумента передается созданный экземпляр Rect , то из последнего берутся координаты верхнего левого угла. Но они уже не (0, 0), а имеют значения, которые равны свойству centerx минус половина ширины и centery минус половина высоты прямоугольной области или соответствующей ей поверхности.

При зажиме стрелок на клавиатуре координата x прямоугольника меняется. В результате метод blit() рисует поверхность в новых координатах.

Практическая работа

У объектов Rect есть метод contains() , который проверяет, заключает ли в себе одна область (к которой применяется метод) другую (которая передается в качестве аргумента).

Напишите программу, в которой, если одна поверхность попадает в пределы другой, то на главной поверхности появляется какая-либо надпись. «Подвижный» экземпляр Surface должен переноситься с помощью мыши.

Курс с примерами решений практических работ:
pdf-версия

X Скрыть Наверх

Pygame. Введение в разработку игр на Python

Вывод текста на pygame

Author24 — интернет-сервис помощи студентам

Подскажите пожалуйста, если создаёшь текстовую игру, что лучше использовать?

И подскажите пожалуйста, как сделать так что бы текст выводится не в одну строку, а доходя до определённой границы начинал выводиться с другой строки и что значит шрифт в плане размера? я просто искал, но не нашёл

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import pygame as pg from pygame.locals import * pg.init() screen = pg.display.set_mode((800, 600)) run_cycle = True pg.display.set_caption('Сталкер') pg.font.SysFont('arial', 36) # pg.font.get_fonts() для того что бы узнать какие есть шрифты f1 = pg.font.Font(None, 30) while run_cycle: pg.time.delay(100) for event in pg.event.get(): if event.type == QUIT: run_cycle = False screen.fill((255, 255, 255)) text1 = f1.render('Hello Привет какой - то текст бла бла бл', 1, (0, 0, 0)) screen.blit(text1, (100, 50)) pg.display.update()

Как вывести какой-то текст в какую-то точку экрана?

Я с помощью модуля pygame сделал окно 500×500 пикселей. Как вывести какой-то текст в какую-то точку экрана?

Отслеживать
12.3k 1 1 золотой знак 19 19 серебряных знаков 42 42 бронзовых знака
задан 11 июл 2019 в 17:22
HackerLacker HackerLacker
11 1 1 серебряный знак 3 3 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

import pygame pygame.init() sc = pygame.display.set_mode((300,200)) sc.fill((255, 255, 255)) f1 = pygame.font.Font(None, 36) text1 = f1.render('Hello Привет', 1, (180, 0, 0)) sc.blit(text1, (10, 50)) pygame.display.update() while 1: for i in pygame.event.get(): if i.type == pygame.QUIT: exit() 

Отслеживать
ответ дан 11 июл 2019 в 17:35
7,175 9 9 золотых знаков 37 37 серебряных знаков 66 66 бронзовых знаков
pygame.display.update() должен быть внутри основного цикла
28 мар 2022 в 7:11

  • python
  • графика
  • pygame
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.1.5619

Почему не появляется текст на экране pygame?

Есть такой код для вывода текста на экран, планирую использовать вывод текста после попадания по персонажу. Но выводится такая ошибка —
f1 = pygame.font.Font(None, 36)
pygame.error: font not initialized
в чем может быть проблема?

  • Вопрос задан более трёх лет назад
  • 1077 просмотров

Комментировать

Решения вопроса 1

Проблема в инициализации.
Для конструктора pygame.font.Font надо передавать имя файла шрифта.
Если же вы хотите использовать системные шрифты, то надо использовать другой конструктор. Пример:
f1 = pygame.font.SysFont(‘arial’, 36)
В данном случае я указал шрифт Arial, можете указать любой присутствующий в вашей системе.
Ну и конечно вначале у вас должна быть инициализация системы шрифтов:
pygame.font.init()

Ответ написан более трёх лет назад

Нравится 1 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *