Обнаружение щелчка мыши в pygame

#python-3.x #pygame

#python-3.x #pygame

Вопрос:

У меня есть задача, в которой у меня есть квадрат 3X3, и для каждого щелчка в маленьком квадрате этот квадрат будет окрашиваться в красный цвет. Вот пока мой код. Я думаю, что я сделал что-то не так в своем первом цикле while, но я не уверен. Пожалуйста, помогите мне.

 import pygame

pygame.init()

#create a screen
screen = pygame.display.set_mode((400, 400))

#colors
white = [255, 255, 255]
red = [255, 0, 0]

x = 0
y = 0

#create my square
for j in range(3):

    for i in range(3):

        pygame.draw.rect(screen, white, (x, y, 30, 30), 1)
        x  = 30

        if x == 90:
            x = 0
            y  = 30

pygame.display.flip()
running = 1

while running:

    event = pygame.event.poll()

#found in what position my mouse is
    if event.type == pygame.QUIT:
        running = 0
    elif event.type == pygame.MOUSEMOTION:
        print("mouse at (%d, %d)" % event.pos)

    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

#mouse click
    if click[0] == 1 and x in range(30) and y in range (30):
        pygame.draw.rect(screen, red, (30, 30 , 29 ,29))

while pygame.event.wait().type != pygame.QUIT:
    pygame.display.change()
  

Ответ №1:

Вы должны update просматривать экран каждый раз, когда рисуете или делаете что-то на экране. Итак, поместите эту строку в свой первый цикл while.

 pygame.display.flip()
  

В вашем состоянии вы проверяли x и y, которые не являются позицией мыши.

 if click[0] == 1 and x in range(30) and y in range (30):
  

Проверьте свое положение мыши в, range(90) потому что у вас есть три прямоугольных и они 30x30 .

 if click[0] == 1 and mouse[0] in range(90) and mouse[1] in range (90):
  

Затем установите прямоугольное начальное положение, чтобы заполнить точку мыши.

 rect_x = 30*(mouse[0]//30) # set start x position of rectangular  
rect_y = 30*(mouse[1]//30) # set start y position of rectangular 
  

Вы можете отредактировать свой код с помощью этого.

 while running:

    pygame.display.flip()
    event = pygame.event.poll()

    #found in what position my mouse is
    if event.type == pygame.QUIT:
        running = 0
    elif event.type == pygame.MOUSEMOTION:
        print("mouse at (%d, %d)" % event.pos)


    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    #mouse click
    if click[0] == 1 and mouse[0] in range(90) and mouse[1] in range (90):

        '''
        rect_x = 30*(0//30) = 0
        rect_y = 30*(70//30) = 60
        '''

        rect_x = 30*(mouse[0]//30) # set start x position of rectangular  
        rect_y = 30*(mouse[1]//30) # set start y position of rectangular 

        pygame.draw.rect(screen, red, (rect_x, rect_y , 30 , 30)) # rectangular (height, width), (30, 30)
  

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