当circle-a和circle-b发生冲突时,这段代码会打印一条"hit“消息。
但是当我运行它时,我得到了错误"'pygame.Rect‘对象没有’‘rect’属性“。
有什么问题吗?(我假设圆a和圆b不是图像或表面,而仅仅是形状。)
import pygame as pg
pg.init()
screen = pg.display.set_mode((1200, 800))
ax=100
ay=400
bx=500
by=400
while 1:
for event in pg.event.get():
if event.type == pg.QUIT:
sys.exit()
ax+=1
bx-=1
a=pg.draw.circle(screen, [0,0,225], [ax, ay], 10)
b=pg.draw.circle(screen, [0,0,0], [bx, by], 10)
if pg.sprite.collide_circle(a,b):
print("hit")
pg.display.update()发布于 2020-06-11 21:24:31
pygame.sprite.collide_circle()旨在与pygame.sprite.Sprite对象一起使用。
在声明中:
if pg.sprite.collide_circle(a,b):a和b是pygame.Rect对象。因此,a和b是pygame.sprite.collide_circle()的非法参数。
写一个函数来计算e个圆是否相交。
计算圆圆心之间的Euclidean distance。并测试中心点之间的距离是否小于圆的半径之和:
import math def collide_circle(c1, r1, c2, r2):
dist = math.hypot(c1[0]-c2[0], c1[1]-c2[1])
return dist < r1+r2if collide_circle(a.center, a.width/2, b.center, b.width/2):
print("hit")或者直接从pygame.Rect对象获取函数中的中心点和半径:
def collide_circle(c1, c2):
r1, r2 = c1.width/2, c2.width/2
dist = math.hypot(c1.centerx-c2.centerx, c1.centery-c2.centery)
return dist < r1+r2if collide_circle(a, b):
print("hit")请参见示例:
import pygame as pg
import math
pg.init()
screen = pg.display.set_mode((1200, 800))
ax, ay = 100, 400
bx, by = 500, 400
def collide_circle(c1, c2):
r1, r2 = c1.width/2, c2.width/2
dist = math.hypot(c1.centerx-c2.centerx, c1.centery-c2.centery)
return dist < r1+r2
while 1:
for event in pg.event.get():
if event.type == pg.QUIT:
sys.exit()
ax+=1
bx-=1
screen.fill((255, 255, 255))
a=pg.draw.circle(screen, [0,0,225], [ax, ay], 10)
b=pg.draw.circle(screen, [0,0,0], [bx, by], 10)
if collide_circle(a, b):
print("hit")
pg.display.update()发布于 2020-06-11 21:32:15
你可以用这个来代替。@Rabbit76提到了错误的原因。
if (math.sqrt((a.x-b.x)**2 + (a.y-b.y)**2))< 20:
print("hit")编辑
您可以使用以下函数。
def check_collision(circle1, circle2):
if (math.sqrt((circle1.x-circle2.x)**2 + (circle1.y-circle2.y)**2)) <= (circle1.size[0] + circle2.size[0])/2:
return True
return False然后
if check_collision(a, b):
print("hit")https://stackoverflow.com/questions/62325191
复制相似问题