Pygame, как сделать так, чтобы круг исчезал и появлялся с помощью MOUSEBUTTONDOWN?

Я новичок в использовании Pygame, и у меня есть вопрос о MOUSEBUTTONDOWN и pygame.draw.circle(). При нажатии на квадрат 62,5x62,5 внутри экрана я хочу, чтобы он отображал зеленый круг, а когда щелкнув его еще раз, я хочу, чтобы он исчез. Я не знаю, как это сделать, и в моем коде я должен спамить, щелкнув квадрат, чтобы круг появился на долю секунды, а затем снова исчез. Я также пытался использовать цикл while, но не смог заставить его работать.

import pygame
pygame.init()

screen = pygame.display.set_mode((800, 600))

running = True
while running:
    screen.fill((0, 0, 0))
    mouse_pos = pygame.mouse.get_pos()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False          
        if event.type == pygame.MOUSEBUTTONDOWN and  mouse_pos[0] >= 150 and  mouse_pos[0] <= 212.5 \
            and  mouse_pos[1] >= 425 and  mouse_pos[1] <= 487.5: 
            pygame.draw.circle(screen, (152, 251, 152), (181.25, 393.75), 20)
            

    pygame.display.update()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
396
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно нарисовать круг в цикле событий, а не в цикле событий. Добавьте логическую переменную draw_circle и переключайте состояние переменной при щелчке мышью.
Вы не можете рисовать с точностью с плавающей запятой. Пиксели и положение мыши имеют целочисленные единицы измерения.
Используйте объект pygame.Rect и collidepoint() для проверки кликов. Позиция щелчка мыши хранится в атрибуте pos объекта pygame.event.Event():

import pygame
pygame.init()

screen = pygame.display.set_mode((800, 600))

draw_circle = False
test_rect = pygame.Rect(0, 0, 40, 40)
test_rect.center = (181, 393)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False          
        if event.type == pygame.MOUSEBUTTONDOWN:
            if test_rect.collidepoint(event.pos):
                draw_circle = not draw_circle

    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (127, 127, 127), test_rect, 1) # for debugging
    if draw_circle:        
        pygame.draw.circle(screen, (152, 251, 152), (181, 393), 20)
    pygame.display.update()

Другие вопросы по теме