在这两个图像碰撞后我立即冻结它们。棒棒糖从左上角开始,熊从右下角开始。他们在中间碰撞。我的立场告诉我他们距离更近,距离不到50分
以下是棒棒糖在坐标中与熊的距离:
lollipop[452, 320] and bear[448, 330]
distance between the two: 10.742572683895418
为什么情节告诉我与我看到的不同?为什么棒棒糖的位置参考位于图像的底部,而熊位于顶部?这是我如何blits图像。
rect = surface1.get_rect()
rect = rect.move(position[0]-rect.width//2, position[1]-rect.height//2)
screen.blit(surface1, rect)
图像尺寸分别为(50,50)和(100,100)。
如何让我的图像比现在更容易碰撞? (当蓝色背景触及时)
当棒棒糖从右侧射出并从左侧承受时,它们是如何碰撞的。
以下是来自顶部/底部lollipop[480, 291] bear[440, 261]
distance: 49.491213409963144
我如何检查碰撞:
def distance(p, q):
return math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2)
答案 0 :(得分:1)
如果我理解,你试图将精灵中心之间的距离与其中一个精灵的大小进行比较。这对于矩形来说是不正确的。
首先,您使用的公式是圆圈。在这种情况下,您必须将距离与圆的组合半径进行比较。
对于矩形,您可以通过执行Separating Axis Test的最小形式来计算交点。
计算每个精灵的最小和最大x
和y
界限,并将它们与每个精灵的组合半尺寸进行比较:
halfWidthSprite1 = sprite1.width//2
halfWidthSprite2 = sprite2.width//2
halfHeightSprite1 = sprite1.height//2
halfHeightSprite2 = sprite2.height//2
distanceX = abs(sprite1.center[0] - sprite2.center[0])
distanceY = abs(sprite2.center[1] - sprite2.center[1])
collision = (distanceX < (halfWidthSprite1 + halfWidthSprite2)) and
(distanceY < (halfHeightSprite1 + halfHeightSprite2))
如评论中所述,您还可以使用内置pygame.sprite.collide_rect实用程序。