Глава 14 • Ведение счета
Следующий код может использоваться для создания кнопок в любой игре. Ниже
приведена первая часть класса
Button
; сохраните ее в файле
button .py
:
button.py
import pygame.font
class Button():
def __init__(self, ai_settings, screen, msg):
"""Инициализирует атрибуты кнопки."""
self.screen = screen
self.screen_rect = screen.get_rect()
# Назначение размеров и свойств кнопок.
self.width, self.height = 200, 50
self.button_color = (0, 255, 0)
self.text_color = (255, 255, 255)
self.font = pygame.font.SysFont(None, 48)
# Построение объекта rect кнопки и выравнивание по центру экрана.
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.screen_rect.center
# Сообщение кнопки создается только один раз.
self.prep_msg(msg)
Сначала программа импортирует модуль
pygame .font
, который позволяет Pygame
выводить текст на экран. Метод
__init__()
получает параметры
self
, объекты
ai_settings
и
screen
, а также строку
msg
с текстом кнопки
. Размеры кнопки
задаются в точке
, после чего атрибуты
button_color
и
text_color
задаются так,
чтобы прямоугольник кнопки был окрашен в ярко-зеленый цвет, а текст выводился
белым цветом.
В точке
происходит подготовка атрибута
font
для вывода текста. Аргумент
None
сообщает Pygame, что для вывода текста должен использоваться шрифт по умолча-
нию, а значение 48 определяет размер текста. Чтобы выровнять кнопку по центру
экрана, мы создаем объект
rect
для кнопки
и задаем его атрибут
center
в соот-
ветствии с одноименным атрибутом экрана.
Pygame выводит строку текста в виде графического изображения. В точке
эта
задача решается методом
prep_msg()
. Код
prep_msg()
выглядит так:
button.py
def prep_msg(self, msg):
"""Преобразует msg в прямоугольник и выравнивает текст по центру."""
self.msg_image = self.font.render(msg, True, self.text_color,
self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
Метод
prep_msg()
должен получать параметр
self
и текст, который нужно вы-
вести в графическом виде (
msg
). Вызов
font.render()
преобразует текст, храня-
щийся в
msg
, в изображение, которое затем сохраняется в
msg_image
. Методу
Добавление кнопки Play
283
font.render()
также передается логический признак режима сглаживания текста.
В остальных аргументах передаются цвет шрифта и цвет фона. В нашем примере
режим сглаживания включен (
True
), а цвет фона совпадает с цветом фона кнопки.
(Если цвет фона не указан, Pygame пытается вывести шрифт с прозрачным фоном.)
В точке
изображение текста выравнивается по центру кнопки, для чего создается
объект
rect
изображения, а его атрибут
center
приводится в соответствие с одно-
именным атрибутом кнопки.
Остается создать метод
draw_button()
, который может вызываться для отображе-
ния кнопки на экране:
button.py
def draw_button(self):
# Отображение пустой кнопки и вывод сообщения.
self.screen.fill(self.button_color, self.rect)
self.screen.blit(self.msg_image, self.msg_image_rect)
Вызов метода
screen.fill()
рисует прямоугольную часть кнопки. Затем вызов
screen.blit()
выводит изображение текста на экран с передачей изображения
и объекта
rect
, связанного с изображением. Класс
Button
готов.
Вывод кнопки на экран
В программе класс
Button
используется для создания кнопки
Play
. Так как нам
нужна только одна кнопка
Play
, мы создадим кнопку прямо в файле
alien_invasion .py
:
alien_invasion.py
...
from game_stats import GameStats
from button import Button
...
def run_game():
...
pygame.display.set_caption("Alien Invasion")
# Создание кнопки Play.
play_button = Button(ai_settings, screen, "Play")
...
# Запуск основного цикла игры.
while True:
...
gf.update_screen(ai_settings, screen, stats, ship, aliens,
bullets,
play_button)
run_game()
Программа импортирует класс
Button
и создает экземпляр
play_button
, после
чего передает
play_button
функции
update_screen()
, чтобы кнопка появлялась
при обновлении экрана
.
284
Достарыңызбен бөлісу: |