我能够使用欧几里德距离的计算在 PyGame 中创建 2 个对象的碰撞。
现在,我不是在要求代码或解决方案,而是只是指出正确的方向并告诉我为什么这种方法不好以及什么可能是更好的方法。
非常感谢!
这适用于 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])
使用统一的网格。
在游戏开发堆栈上查看重复的问题此处