Как сделать кнопку на Pygame?

Как мне сделать кнопку "exit", чтобы при нажатии на нее игра закрывалась?

#import module
import pygame

#setup
pygame.init()
screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
clock = pygame.time.Clock()
running = True
menu = True

#load font
font = pygame.font.SysFont('Arial', 32)

#load text
close = font.render("exit",0,(255, 255, 255))

#game code
while running:
    screen.fill("black")

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    if menu:
        screen.blit(close, (32, (screen.get_height()-32)-64))
    else:
        pass
    
    pygame.display.update()
    clock.tick(60)
pygame.quit()

Ответы (1 шт):

Автор решения: S. Nick

Чтобы создать кликабельную кнопку в Pygame, вы можете выполнить следующие шаги:

  • Создайте поверхность для кнопки. Поверхность должна соответствовать размеру и форме кнопки.

  • Нарисуйте текст и рамку кнопки на поверхности.

  • Создайте объект pygame.Rect, который представляет границы кнопки.

  • Создайте обработчик событий pygame.event.MOUSEBUTTONDOWN, который проверяет, нажата ли мышь внутри границ кнопки.

  • Вызовите функцию pygame.display.update(), чтобы отобразить кнопку на экране.


import sys
import pygame


pygame.init()

clock = pygame.time.Clock()

# Создаём окно Pygame
window_size = (400, 400)
screen = pygame.display.set_mode(window_size)
pygame.display.set_caption('Pygame Кликабельная кнопка')

# Создаем объект шрифта
font = pygame.font.Font(None, 24)

# Создайте поверхность для кнопки
button_surface = pygame.Surface((150, 50))

# Отображение текста на кнопке
text = font.render("Click Me", True, (0, 0, 0))
text_rect = text.get_rect(
    center=(button_surface.get_width() /2, 
            button_surface.get_height()/2))

# Создайте объект pygame.Rect, который представляет границы кнопки
button_rect = pygame.Rect(125, 125, 150, 50)  # Отрегулируйте положение

while True:
    clock.tick(60)
    screen.fill((155, 255, 155))

    # Получаем события из очереди событий
    for event in pygame.event.get():
        # Проверьте событие выхода
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        # Проверяем событие нажатия кнопки мыши
        if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            # Вызовите функцию on_mouse_button_down()
            if button_rect.collidepoint(event.pos):
                print("Button clicked!")

    # Проверьте, находится ли мышь над кнопкой. 
    # Это создаст эффект наведения кнопки.
    if button_rect.collidepoint(pygame.mouse.get_pos()):
        pygame.draw.rect(button_surface, (127, 255, 212), (1, 1, 148, 48))
    else:
        pygame.draw.rect(button_surface, (0, 0, 0), (0, 0, 150, 50))
        pygame.draw.rect(button_surface, (255, 255, 255), (1, 1, 148, 48))
        pygame.draw.rect(button_surface, (0, 0, 0), (1, 1, 148, 1), 2)
        pygame.draw.rect(button_surface, (0, 100, 0), (1, 48, 148, 10), 2)
 
    # Показать текст кнопки
    button_surface.blit(text, text_rect)

    # Нарисуйте кнопку на экране
    screen.blit(button_surface, (button_rect.x, button_rect.y))

    # Обновить состояние
    pygame.display.update()

введите сюда описание изображения

→ Ссылка