Как проверить столкновение между мышью и прямоугольным объектом

#python #pygame #menu

#python #pygame #меню

Вопрос:

я создаю код для симулятора covid, но немного застрял в меню.

Пока мой код для меню выглядит следующим образом:

 import pygame
pygame.init()

font_title = pygame.font.SysFont("arial", 35)
font_para = pygame.font.SysFont("monospace", 15)

BLACK = (0, 0, 0)
WHITE = (255,255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

menu = pygame.display.set_mode((999, 800))
pygame.display.set_caption('WELCOME TO COVID-19 SIMULATOR')

clock = pygame.time.Clock()

def Label(screen, text, size, font, color, x, y):
    label = font.render(text, size, color)
    screen.blit(label, (x, y))

Flag = True
def Menu():
    while Flag == True:
        title = Label(menu, "COVID-19 SIMULATOR: Main Menu", 1, font_title, WHITE, 275, 150)

        own_sim = pygame.Rect(350, 290, 290, 40)
        saved_sim = pygame.Rect(350, 390, 290, 40)
        referrences = pygame.Rect(350, 490, 290, 40)

        x_mouse, y_mouse = pygame.mouse.get_pos()
        if own_sim.collidepoint((x_mouse, y_mouse)):
            if click:
                own_sim()
        if saved_sim.colllidepoint((x_mouse, y_mouse)):
            if click:
                saved_sim()
        if referrences.collidepoint((x_mouse, y_mouse)):
            if click:
                referrences()
        
        pygame.draw.rect(menu, RED, own_sim)
        pygame.draw.rect(menu, RED, saved_sim)
        pygame.draw.rect(menu, RED, referrences)

        pygame.display.flip()
        clock.tick(60)

Menu()
 

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

Комментарии:

1. Название вашего вопроса неверно, потому что обнаружение Коллисона работает нормально.

2. Привет, всякий раз, когда я запускаю его в pycharm, он не работает, он продолжает сообщать мне, что у rect нет точки столкновения атрибутов

3. Это опечатка. 1 раз, когда вы написали colllidepoint , а не collidepoint

4. Оппсс, большое вам спасибо за вашу помощь

Ответ №1:

В вашем коде есть опечатка. collidepoint записывается с ll помощью, а не с lll :

if saved_sim.colllidepoint((x_mouse, y_mouse)):

 if saved_sim.collidepoint((x_mouse, y_mouse)):