Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检测选定对象与列表中其他对象之间的碰撞?_Python_List_Pygame - Fatal编程技术网

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之外向回答你问题的人寻求帮助,因为该网站的全部目的是帮助其他有类似问题的人——另外,如果他们想说“不”,这有点尴尬。这太宽泛/模糊了,你能更具体地说明你的尝试吗,问题是什么,等等。?此外,变量和函数名应遵循带有下划线的
小写形式。这太宽泛/模糊了,您能更具体地说明您尝试过的内容、问题所在等吗。?此外,变量和函数名应遵循带有下划线的
小写形式。