Pygame проверяет наличие столкновений с самым верхним прямоугольником переднего плана

У меня есть 10 спрайтов, которые являются объектами основного спрайта, которые я написал с разными изображениями, начальными позициями и т. Д. Но все они ведут себя одинаково. Это вспомогательные спрайты основного спрайта.

Я хочу иметь возможность удерживать щелчок мышью по прямоугольнику и перемещать его по экрану, что отлично работает. Но проблема в том, что все они имеют одинаковые элементы управления, щелкнув и перетащив их, чтобы переместить. Поэтому, если я нажимаю на один из прямоугольников спрайта и перетаскиваю его поверх другого, он также подхватывается. И я не хочу, чтобы это произошло.

Есть ли способ проверить наличие столкновений только с самым верхним прямоугольником переднего плана, или если кто-то может объяснить, как это сделать, чтобы достичь аналогичных результатов. Я просмотрел документацию rect, но не могу найти решения.

def update(self,):
    self.move(self.rect)

def move(self,rect):

    if pygame.mouse.get_pressed() == (1, 0, 0) and the_rect.collidepoint(pygame.mouse.get_pos()):
        self.state = 1

    elif pygame.mouse.get_pressed() == (0, 0, 0) and the_rect.collidepoint(pygame.mouse.get_pos()):
        self.state = 0

    if self.state == 0:
        the_rect.centerx = the_rect.centerx
        the_rect.centery =  the_rect.centery
    elif self.state == 1:
        (the_rect.centerx, the_rect.centery) = pygame.mouse.get_pos()

person user1473612    schedule 29.06.2012    source источник


Ответы (1)


Вместо использования функции pygame.mouse.get_pressed () используйте очередь событий и проверьте наличие события pygame.MOUSEBUTTONDOWN. Он сработает только один раз при первом нажатии кнопки.

person Daniel Kinsman    schedule 03.07.2012