如何一次调用列表中的所有项目?
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
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