Я новичок в использовании 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()
Вам нужно нарисовать круг в цикле событий, а не в цикле событий. Добавьте логическую переменную 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()