PyGame 多个对象比较/碰撞检测

问题描述 投票:0回答:1

我能够使用欧几里德距离的计算在 PyGame 中创建 2 个对象的碰撞。

  • 创建的圆圈在屏幕上移动,根据“重力”或“弹跳”值改变坐标,改变给定方向的速度
  • 我很难将该逻辑应用于两个以上的对象。
  • 我试图让 1 个循环遍历创建的对象列表
  • 然后第二个嵌套循环再次循环该列表
  • 在第二个循环中,我试图检查一个物体到另一个物体的距离
  • 问题是,当物体超过 20 个时,它会变慢,因为它在运行时必须同时计算 1 个物体到另一个物体的距离

现在,我不是在要求代码或解决方案,而是只是指出正确的方向并告诉我为什么这种方法不好以及什么可能是更好的方法。

非常感谢!

这适用于 2 个创建的对象:

def collisionDetection(objectOne,objectTwo):
euclidianDistance = ((objectOne.x-objectTwo.x)**2+(objectOne.y-objectTwo.y)**2)**0.5
if(abs(euclidianDistance)<(objectTwo.radius+objectTwo.radius)):
        print (f"COLLISION detected: Euclidian Distance[{euclidianDistance}]")
        objectOne.x = objectTwo.x-objectTwo.radius-objectOne.radius
        objectOne.velocityX *=-1
        objectTwo.velocityX*=-1
else:
        print (f"Euclidian Distance[{euclidianDistance}]")
print(euclidianDistance)

还有这样的事情,打电话。是的,循环可能不是 100% 正确,如果总体想法完全错误,我会修复它。

def dynamicObjectComparing(ballObjects):
n = len(ballObjects)
if(n>0):
    for i in range(n):
        print(f'Current [x] [y] coordinates for objects {ballObjects[i].ballNumber} are: [{ballObjects[i].x}] [{ballObjects[i].y}]')
        for x in range(i+1,n):
            collisionDetection(ballObjects[i], ballObjects[x])
python loops pygame collision-detection
1个回答
0
投票

使用统一的网格。

在游戏开发堆栈上查看重复的问题此处

© www.soinside.com 2019 - 2024. All rights reserved.