Книга «Изучаем Python»



Pdf көрінісі
бет148/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   144   145   146   147   148   149   150   151   ...   238
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    Глава 14  •  Ведение счета

Затем следует внести изменения в 

update_screen()

, чтобы кнопка 

Play

 появлялась 



только в неактивном состоянии игры:

game_functions.py

def update_screen(ai_settings, screen, stats, ship, aliens, bullets,

        play_button):

"""Обновляет изображения на экране и отображает новый экран."""

...

    


    # Кнопка Play отображается в том случае, если игра неактивна.

    if not stats.game_active:

        play_button.draw_button()

            

# Отображение последнего прорисованного экрана.

pygame.display.flip()

Чтобы кнопка 

Play


 не закрывалась другими элементами экрана, мы отображаем 

ее после всех остальных игровых элементов, но перед переключением на новый 

экран. Теперь при запуске Alien Invasion в центре экрана отображается кнопка 

Play


 (рис. 14.1).



Достарыңызбен бөлісу:
1   ...   144   145   146   147   148   149   150   151   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет