如何解决为什么即使没有碰撞或没有接触地板,我的代码也会不断打印 1?
由于某种原因,我的代码打印了 1,即使它没有与任何其他球或地板发生碰撞。我使用 sys、pygame.locals
和 pygame 作为我的主要库,并且在任何地方都没有出现错误。
代码:
pygame.init()
screen = pygame.display.set_mode((1000,500))
green = (0,255,0)
circles = []
gravity = 1
def mainPhysics():
for circle_pos in circles:
circle_pos[1] += gravity
if circle_pos[1] > 495:
boundaries = circle_pos[1] - 495
circle_pos[1] -= boundaries
if circle_pos[0] < 0:
boundaries2 = circle_pos[0]
circle_pos[0] += boundaries2
if circle_pos[0] > 995:
boundaries3 = circle_pos[0] - 995
circle_pos[0] - boundaries3
circle_rect = pygame.draw.circle(screen,green,circle_pos,5)
collide = circle_rect.collidepoint(circle_pos)
print('1') if collide else print('0')
def input():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
circles.append(list(event.pos))
if event.type == pygame.MOUSEBUTTONDOWN and pygame.MOUSEMOTION:
circles.append(list(event.pos))
clock = pygame.time.Clock()
while True:
screen.fill((15,15,15))
input()
mouse_pos = pygame.mouse.get_pos()
mainPhysics()
pygame.display.update()
clock.tick(120)
解决方法
对于碰撞检测,您需要 2 个对象。在嵌套循环中遍历圆圈。 要检测 2 个圆圈之间的碰撞,请参阅 Pygame how to let balls collide、pygame Get the balls to bounce off each other 或 How do I detect collision in pygame?:
for i,circle_pos_1 in enumerate(circles):
for circle_pos_2 in circles[i+1:]:
dx = circle_pos_2[0] - circle_pos_1[0]
dy = circle_pos_2[1] - circle_pos_1[1]
if dx*dx + dy*dy < 5*5:
# [...]
最小示例:
import pygame
pygame.init()
screen = pygame.display.set_mode((1000,500))
green = (0,255,0)
circles = []
gravity = 1
def input():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
circles.append(list(event.pos))
count = 0
clock = pygame.time.Clock()
while True:
screen.fill((15,15,15))
input()
mouse_pos = pygame.mouse.get_pos()
for circle_pos in circles:
circle_pos[1] += gravity
if circle_pos[1] > 495:
boundaries = circle_pos[1] - 495
circle_pos[1] -= boundaries
if circle_pos[0] < 0:
boundaries2 = circle_pos[0]
circle_pos[0] += boundaries2
if circle_pos[0] > 995:
boundaries3 = circle_pos[0] - 995
circle_pos[0] - boundaries3
for i,circle_pos_1 in enumerate(circles):
for circle_pos_2 in circles[i+1:]:
dx = circle_pos_2[0] - circle_pos_1[0]
dy = circle_pos_2[1] - circle_pos_1[1]
if dx*dx + dy*dy < 5*5:
count += 1
print(f"hit: {count}")
for circle_pos in circles:
pygame.draw.circle(screen,green,circle_pos,5)
pygame.display.update()
clock.tick(120)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。