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
计算从obj
到pos
的距离(毕达哥拉斯定理)。
我正在尝试创建游戏。我有一个不断移动的圆圈列表。如果用户单击其中一个圆圈,我想打印“是”。我尝试使用“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
计算从obj
到pos
的距离(毕达哥拉斯定理)。