如何检测所选对象与列表中其他对象之间的碰撞
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检测所选对象与列表中其他对象之间的碰撞相关的知识,希望对你有一定的参考价值。
我如何检测汽车和traffico中的其他元素之间是否发生碰撞?
Car.posAtt是汽车在地图上的实际位置
Car.visione是在汽车前面的矩形区域,可彼此之间形成距离
Car.ingombro是图像的矩形。
当car.visione检测到与另一辆car.ingombro碰撞时,这很奇怪
for car in traffico:
if countTrafficLight == 1:
if car.quadPart == 2:
if car.posAtt[1] < 430 or car.posAtt[1] > 435:
car.Move()
pygame.draw.rect(schermoGioco, BLUE, car.visione)
if car.posAtt == CoordToTurn(car.quadPart, car.quadArr):
car.Turn()
elif car.quadPart == 3:
if car.posAtt[0] > 570 or car.posAtt[0] < 565:
car.Move()
pygame.draw.rect(schermoGioco, BLUE, car.visione)
if car.posAtt == CoordToTurn(car.quadPart, car.quadArr):
car.Turn()
elif car.quadPart == 4:
if car.posAtt[1] < 210 or car.posAtt[1] > 220:
car.Move()
pygame.draw.rect(schermoGioco, BLUE, car.visione)
if car.posAtt == CoordToTurn(car.quadPart, car.quadArr):
car.Turn()
elif car.quadPart == 1:
car.Move()
pygame.draw.rect(schermoGioco, BLUE, car.visione)
if car.posAtt == CoordToTurn(car.quadPart, car.quadArr):
car.Turn()
答案
实现此目标的最佳方法是将car
转换为PyGame Sprite对象。这将使代码可以使用SpriteGroup
和强大的groupcollide
函数。
代替这一点,应该可以简单地循环N x N次,检查每辆汽车是否与其他汽车相对。从您的问题中我不确定visione
矩形到底代表什么,在代码下面假设它是汽车本身的边界矩形。
def carCollidesWith( test_car, traffic ):
"""Returns the car-in-traffic that test_car collies with, or None"""
result = None
for car in traffic:
if ( car is not test_car ): # don't collide with yourself
if ( test_car.visione.colliderect( car.visione ) ):
result = car
break
return result
但是还有许多其他方法可以更有效地执行此操作。看看pygame Rect库documentation。
以上是关于如何检测所选对象与列表中其他对象之间的碰撞的主要内容,如果未能解决你的问题,请参考以下文章