如何一次调用列表中的所有项目?

how to call all items in a list at once?

for i in objects:
    if self.y + self.y_vel > HEIGHT+self.ySize:
        self.y_vel = 0
        break
    elif pygame.Rect.colliderect(self.rect, i.rect):
        self.y_vel = 0
        break
    else:
        self.y_vel += 0.05

这段代码在最后一个 else 之前都可以正常工作,因为 for 循环可能还没有到达它与之碰撞的对象,所以它给了它重力所以我的问题是有没有办法做到 pygame.Rect.colliderect(self.rect, all(i).rect) 但是不起作用我尝试了 all() 但我真的不知道它是如何工作的任何帮助表示赞赏

您不想使用 all but any。另外,你需要重组代码,因为当物体与地面碰撞时,你不需要检查与物体的碰撞:

if self.y + self.y_vel > HEIGHT+self.ySize:
    self.y_vel = 0
else:
    if any(self.rect.colliderect(o.rect) for o in objects):
        self.y_vel = 0
    else:
        self.y_vel += 0.05

但是,您不想让物体稍微漂浮在障碍物上方。因此,当您检测到碰撞时,您可能希望将物体紧贴障碍物放置:

self.rect.y = self.y + self.y_vel

if self.rect.bottom > HEIGHT:
    self.rect.bottom = HEIGHT
    self.y = self.rect.y
    self.y_vel = 0

else:
    collided = False
    for o in objects:
        if self.rect.colliderect(o.rect):
            collided = True
            self.rect.bottom = o.rect.top
            self.y = self.rect.y
            self.y_vel = 0
            break

    if not collided:
        self.y_vel += 0.05