Pygame 如果我点击一个移动的圆圈则打印 ("yes")

Pygame print ("yes") if I clicked on a moving circle

我正在尝试创建游戏。我有一个不断移动的圆圈列表。如果用户单击其中一个圆圈,我想打印“是”。我尝试使用“if in”条件,但它不起作用。请帮助我

import pygame

import random

pygame.init()

blanc = (255, 255, 255)
vert = (0, 255, 0)

Taille =[500, 500]
fenetre = pygame.display.set_mode(Taille)

pygame.display.set_caption("bienvenue!")

termine = False

horloge = pygame.time.Clock()

liste_objets= []
for i in range(100):
    x = random.randrange(0,450)
    y = random.randrange(0,495)
    liste_objets.append([x,y])

while termine == False:
    
    fenetre.fill(blanc)

    for i in liste_objets:
        i[0] += 1
        pygame.draw.circle(fenetre, vert, i, 5)
        if i[0] > 500:
            i[0] = 0
        
    pygame.display.flip()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            termine = True
        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            if pos in liste_objets:
                print("yes")

    pygame.display.flip()

    horloge.tick(200)
pygame.quit()

当您使用 in 条件时,您必须确保您拥有正确的类型。您的列表包含其他列表对象,而 pygame.mouse.get_pos() returns 一个元组对象,list != tuple 即使元素相同。

一个比较关键的问题是你要检查你的鼠标是在一个圆圈内,而不是在某个点上。
要检查一个点是否在圆中,您必须找到从该点到圆心的距离,并检查该距离是否小于圆的半径。
例如:

for obj in liste_objets:
    if ((obj[0] - pos[0])**2 + (obj[1] - pos[1])**2)**0.5 <= 5:
        print("yes")

((obj[0] - pos[0])**2 + (obj[1] - pos[1])**2)**0.5计算从objpos的距离(毕达哥拉斯定理)。