Python 如何检测选定对象与列表中其他对象之间的碰撞?
如何检测车辆与交通中的其他元素之间是否发生碰撞(Python 如何检测选定对象与列表中其他对象之间的碰撞?,python,list,pygame,Python,List,Pygame,如何检测车辆与交通中的其他元素之间是否发生碰撞(traffico) Car.posAtt是汽车在地图中的实际位置 Car.visione是一个位于汽车前面的Rect,用于在彼此之间建立距离 Car.ingombro是图像的Rect 显然,当car.visione检测到与另一辆car.ingombros发生碰撞时,它将停止 for car in traffico: if countTrafficLight == 1: if car.quadPart == 2:
traffico
)
是汽车在地图中的实际位置Car.posAtt
是一个位于汽车前面的Car.visione
,用于在彼此之间建立距离Rect
是图像的Car.ingombro
Rect
car.visione
检测到与另一辆car.ingombro
s发生碰撞时,它将停止
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()
用于交通中的车辆:
如果countTrafficLight==1:
如果car.quadPart==2:
如果car.posAtt[1]<430或car.posAtt[1]>435:
汽车移动
pygame.draw.rect(schermoGioco、BLUE、car.visione)
如果car.posAtt==CoordToTurn(car.quadPart,car.quadArr):
汽车转弯
elif car.quadPart==3:
如果car.posAtt[0]>570或car.posAtt[0]<565:
汽车移动
pygame.draw.rect(schermoGioco、BLUE、car.visione)
如果car.posAtt==CoordToTurn(car.quadPart,car.quadArr):
汽车转弯
elif car.quadPart==4:
如果car.posAtt[1]<210或car.posAtt[1]>220:
汽车移动
pygame.draw.rect(schermoGioco、BLUE、car.visione)
如果car.posAtt==CoordToTurn(car.quadPart,car.quadArr):
汽车转弯
elif car.quadPart==1:
汽车移动
pygame.draw.rect(schermoGioco、BLUE、car.visione)
如果car.posAtt==CoordToTurn(car.quadPart,car.quadArr):
汽车转弯
实现此功能的最佳方法是将汽车
转换为PyGame Sprite对象。这将允许代码使用SpriteGroup
和强大的groupcollide
函数
作为替代,应该可以简单地循环N x N次,检查每辆车与其他车的对比。从你的问题中,我不确定ingombro矩形到底代表什么,但在代码下面,它假设是围绕汽车本身的边界矩形
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.ingombro.colliderect( car.ingombro ) ):
result = car
break
return result
不过,还有很多其他方法可以更有效地做到这一点。查看pygame
Rect
库。实现此功能的最佳方法是将您的汽车
转换为pygame Sprite对象。这将允许代码使用SpriteGroup
和强大的groupcollide
函数
作为替代,应该可以简单地循环N x N次,检查每辆车与其他车的对比。从你的问题中,我不确定ingombro矩形到底代表什么,但在代码下面,它假设是围绕汽车本身的边界矩形
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.ingombro.colliderect( car.ingombro ) ):
result = car
break
return result
不过,还有很多其他方法可以更有效地做到这一点。看一下pygame
Rect
库。嗨,我可以私下给你写信吗?因为我需要很多帮助?在哪里?@AMBROSIO:在我看来,你不适合向回答你问题的人寻求stackoverflow以外的帮助,因为网站的全部目的是帮助其他有类似问题的人——而且如果他们想说“不”,这有点尴尬。嗨,我可以私下给你写信,因为我需要很多帮助吗?在哪里?@AMBROSIO:在我看来,你不适合在stackoverflow之外向回答你问题的人寻求帮助,因为该网站的全部目的是帮助其他有类似问题的人——另外,如果他们想说“不”,这有点尴尬。这太宽泛/模糊了,你能更具体地说明你的尝试吗,问题是什么,等等。?此外,变量和函数名应遵循带有下划线的小写形式。这太宽泛/模糊了,您能更具体地说明您尝试过的内容、问题所在等吗。?此外,变量和函数名应遵循带有下划线的小写形式。