Python | Отображать текст в окне PyGame
Pygame — это кроссплатформенный набор модулей Python, предназначенных для написания видеоигр. Он включает в себя компьютерную графику и звуковые библиотеки, разработанные для использования с языком программирования Python. Теперь дело за фантазией или необходимостью разработчика, какую игру он хочет разработать с помощью этого инструментария.
Команда для установки Pygame в системе на базе Windows:
Существует 7 основных шагов для отображения текста в окне pygame :
Ниже приведена реализация:
# импорт модуля pygame в эту программу
# активировать библиотеку pygame
# инициировать Pygame и дать разрешение
# использовать функциональность Pygame.
pygame.init()
# определить значение RGB для белого,
# зеленый, синий цвет.
# присваивание значений переменной X и Y
# создать объект отображаемой поверхности
# определенного размера..e (X, Y).
display_surface = pygame.display.set_mode((X, Y ))
# установить имя окна Pygame
pygame.display.set_caption( ‘Show Text’ )
# создать текстовый объект suface,
# на котором нарисован текст.
# создать прямоугольный объект для
# текстовая поверхность объекта
# установить центр прямоугольного объекта.
# полностью заполнить поверхность объекта
# копирование объекта текстовой поверхности
# к объекту отображения поверхности
# в центральной координате.
# перебирать список объектов Event
# который был возвращен методом pygame.event.get ().
for event in pygame.event.get() :
# если тип объекта события QUIT
# затем выход из игры
# и запрограммируйте оба.
if event. type = = pygame.QUIT :
# деактивирует библиотеку pygame
# выйти из программы.
# Рисует поверхность объекта на экране.
Выход :
Мой блог
вторник, 16 апреля 2013 г.
Простой вывод текста Pygame
# Инициализируем движок
pygame.init()
# Определяем цвета
aqua = ( 0, 255, 255) # морская волна
black = ( 0, 0, 0) # черный
blue = ( 0, 0, 255) # синий
fuchsia = (255, 0, 255) # фуксия
gray = (128, 128, 128) # серый
green = ( 0, 128, 0) # зеленый
lime = ( 0, 255, 0) # цвет лайма
maroon = (128, 0, 0) # темно-бордовый
navy_blue = ( 0, 0, 128) # темно-синий
olive = (128, 128, 0) # оливковый
purple = (128, 0, 128) # фиолетовый
red = (255, 0, 0) # красный
silver = (192, 192, 192) # серебряный
teal = ( 0, 128, 128) # зелено-голубой
white = (255, 255, 255) # белый
yellow = (255, 255, 0) # желтый
# Задаем ширину и высоту экрана
size = [1000,800]
screen = pygame.display.set_mode(size)
# Установить заголовок окна
pygame.display.set_caption(«Окно игры»)
# Основной цикл программы
while done==False:
# Пользователь что-то сделал
for event in pygame.event.get():
# Реагируем на действия пользователя
if event.type == pygame.QUIT:
done=True
screen.fill(yellow)
# Тут можно рисовать
fontObj = pygame.font.Font(‘freesansbold.ttf’, 50)
textSurfaceObj = fontObj.render(‘Hello world!’, True, yellow, blue)
textRectObj = textSurfaceObj.get_rect()
textRectObj.center = (500, 400)
screen.fill(white)
screen.blit(textSurfaceObj, textRectObj)
# Рисунок появится после обновления экрана
pygame.display.flip()
# Экран будет перерисовываться 30 раз в секунду
clock.tick(30)
# Корректный выход
pygame.quit()
# Выбрать шрифт для использования.
# Стандартный шрифт, размером в 25.
font = pygame.font.Font(None, 25)
Как рисовать текст различными шрифтами
На этом занятии мы с вами разберемся как в Pygame происходит отображение текста разными шрифтами. И начнем со шрифтов. Для работы с ними имеется встроенный модуль:
Например, вот так можно получить список всех шрифтов, установленных на устройстве:
И выберем первый из них:
На выходе получим экземпляр класса Font, на который ссылается переменная f_sys. Далее, уже используя эту переменную, мы можем работать с выбранным шрифтом.
Аналогично используется и второй класс:
только здесь мы указываем полный путь к шрифту (обычно, это какой-либо нестандартный шрифт, который мы хотим использовать в нашей программе). Давайте нарисуем с его помощью текст. Программа будет выглядеть так:
Смотрите, сначала вызывается метод render чтобы сформировать слой Surface, на котором будет написан текст «Привет мир!» выбранным шрифтом. Параметр 1 говорит, что нужно выполнять сглаживание границ букв (0 – без сглаживания), затем идет цвет текст и цвет фона. После этого мы получаем координаты прямоугольной области поверхности sc_text, расположенной по центру клиентской области окна приложения. И далее, с помощью уже известного метода blit отображаем текст в окне. Результат работы программы выглядит так:
Вот такие действия нужно выполнить для отображения текста в Pygame. Однако, если мы хотим использовать шрифт по умолчанию, используемый в этой библиотеке, то вместо имени шрифта, в приведенных выше классах, следует указывать значение None, например:
В заключение этого занятия я приведу пример простой программы по перемещению изображения текста с помощью мышки (lesson 7.text_move.py: https://github.com/selfedu-rus/pygame):
Смотрите, в главном цикле мы проверяем: находится ли курсор мыши в области окна приложения и располагается ли над текстом. Если это так, то далее проверяем: нажата ли левая кнопка мыши и при истинности проверки получаем смещение курсора мыши. Причем, первое смещение будет нулевым, т.к. выше при проверке события MOUSEBUTTONDOWN мы вызываем эту же функцию get_rel(), поэтому при ее повторном вызове она возвратит нулевые смещения. Далее, смещая курсор мыши переменная rel будет ссылаться на кортеж из значений смещения по координатам X и Y. Мы используем этот кортеж, чтобы изменить положение прямоугольника pos и отобразить текст с этими новыми координатами с помощью функции draw_text().
Вот так довольно просто выполняется работа с текстом в Pygame.
Видео по теме
Что такое Pygame? Каркас приложения, FPS | Pygame #1
Рисование графических примитивов | Pygame #2
Как обрабатывать события от клавиатуры | Pygame #3
Как обрабатывать события от мыши | Pygame #4
Создание поверхностей (Surface) и их анимация. Метод blit | Pygame #5
Класс Rect. Его роль, свойства и методы | Pygame #6
Как рисовать текст различными шрифтами | Pygame #7
Как работать с изображениями. Модули image и transform | Pygame #8
Что такое спрайты и как с ними работать | Pygame #9
Как делать контроль столкновений | Pygame #10
Добавляем звук в игровой процесс. Модули mixer и music | Pygame #11
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Pygame Font and Text
This article covers Font and Text in Pygame.
No game is complete without font or text in it. Whether it’s a simple “Game Over” message or dialogue between several characters, Font and Text has an important role in Pygame.
Fonts use the file .ttf, which stands for True Type File.
Fonts can often be a tricky thing. For instance, the font you’ve picked for your Game might not be available on certain devices or systems. In cases like these, pygame will use the default system font instead.
Font and Text
Pygame.font.Font()
pygame.font.Font() is used mainly when you’ve included an actual ttf Font file with your code. For example, if you have a ttf file for the font arial in the same directory as your python file, you can use it with the following code.
The first parameter is the file path, and the second is the font size.
The obvious benefit of this is that there is no chance of the font you’ve selected not being available.
Another thing you can do is simply to make the your program use the system default font from the beginning. This method is 100% error free and not prone to any “missing font” problems.
Just remember, the system default font will vary from system to system.
Pygame.font.SysFont()
A good strategy is to first find the fonts supported by the system the code is executing on. The pygame.font.get_fonts() function will return a list of all the names of the fonts it can find on your system. We ran the code on our windows desktop and the following output was received. (We only included about 10 lines for readability, there were 52 in total)
It looks like a lot, but certain system have less than a dozen system fonts available to them. Now that we have these font names in front of us, we can simply pick one and pass it into the SysFont() function.
Using SysFonts
The SysFont() function only requires the name of the font, not the file path. For this reason the ttf extension is not included. The second parameter remains the same however, representing font size.
As you can see, there we’ve created several types of fonts. The reason being that in an average game, there are many different types of fonts you’ll be using for different parts of the text. It would be highly unusual to have the same type of the font family and size throughout your game.
For instance, we’ve created a font type for dialogue using a rather small font size. For the “Game Over” text that many games have, we’ve used a much larger font size. We’ve even created a different font for names, with it’s font size being a little larger than text (to make it stand out a bit).
Defining the font is only the first step. Next up you actually have to render your chosen font and create a surface object. You also get to decide the color while rendering. The True parameter stands for anti-aliasing, used to make the edges smoother. Pass True if you want to use it, otherwise pass False.
The final step is to actually display the object onscreen. For this purpose, we use the surface.blit() function. It takes two parameters, first a surface object and second a pair of co-ordinates to draw the surface object to.
Pygame Fonts Example
Now we’ll actually put together all the code shown above into one comprehensive program and show you the output.
The code for our program.
Below is the output of the below code.
Bonus:
You can be a little more organized and efficient by creating tuples with RGB values beforehand, stored in variables.
Now all you have to do is write the name of the color (variable) you want in the appropriate place, and you’re done.
This marks the end of the Pygame Font and Text article. Any suggestions or contributions for CodersLegacy are more than welcome. Questions regarding the article material, can be asked in the comments section below.
Модуль pygame.font
Классы Font и SysFont находятся в модуле pygame.font и предназначены для работы со шрифтами и текстом. Чтобы создавать от этих классов объекты, модуль pygame.font необходимо предварительно инициализировать командой pygame.font.init(), или выполнить инициализацию всех вложенных модулей библиотеки Pygame командой pygame.init().
От классов pygame.font.Font и pygame.font.SysFont создаются объекты-шрифты. Второй класс берет системные шрифты, поэтому конструктору достаточно передать имя шрифта. Конструктору Font надо передавать имя файла шрифта. Например:
Пример полного адреса в системе Linux – «/usr/share/fonts/truetype/msttcorefonts/Arial.ttf».
Второй аргумент – это размер шрифта в пикселях.
Узнать, какие шрифты есть в системе, можно с помощью функции get_fonts():
Узнать адрес конкретного шрифта:
Вы можете скопировать шрифт в каталог программы и обращаться к нему без адреса:
В pygame есть шрифт по-умолчанию. Чтобы использовать его, вместо имени файла в конструктор надо передать объект None:
От обоих классов (Font и SysFont) создаются объекты типа Font.
Метод render() экземпляра Font создает поверхность (экземпляр Surface), на которой «написан» переданный в качестве аргумента текст, шрифтом, к которому применяется метод. Вторым аргументом указывается сглаживание, третьим – цвет текста. При необходимости четвертым аргументом можно указать цвет фона.
Рассмотрим такой пример:
Вспомним, что метод get_rect() экземпляра Surface возвращает объект типа Rect, чьи размеры соответствуют размерам поверхности.
Поскольку у самой поверхности нет собственных свойств-координат на родительском окне, а у Rect они есть, то по умолчанию, если get_rect() применяется без аргументов, для его верхнего левого угла устанавливаются координаты (0, 0).
В нашем примере мы передаем в get_rect() значение для свойства center порождаемой прямоугольной области. Это свойство определяет координаты центра экземпляра Rect (то, что это еще и центр главного окна, неважно). При этом остальные координаты, в том числе координаты верхнего левого угла, вычисляются автоматически, исходя из установленного центра и размеров поверхности.
Поэтому, когда вызывается метод blit(), в который в качестве второго аргумента передается созданный экземпляр Rect, то из последнего берутся координаты верхнего левого угла. Но они уже не (0, 0), а имеют значения, которые равны свойству centerx минус половина ширины и centery минус половина высоты прямоугольной области или соответствующей ей поверхности.
При зажиме стрелок на клавиатуре координата x прямоугольника меняется. В результате метод blit() рисует поверхность в новых координатах.
Практическая работа
У объектов Rect есть метод contains(), который проверяет, заключает ли в себе одна область (к которой применяется метод) другую (которая передается в качестве аргумента).
Напишите программу, в которой, если одна поверхность попадает в пределы другой, то на главной поверхности появляется какая-либо надпись. «Подвижный» экземпляр Surface должен переноситься с помощью мыши.
Шапошникова С. (plustilino) © 2020
Pygame. Введение в разработку игр на Python