Python 将精灵添加到它不支持的组中';不要与组中的任何精灵碰撞

Python 将精灵添加到它不支持的组中';不要与组中的任何精灵碰撞,python,pygame,Python,Pygame,我想在屏幕上制作10个左右的云,我希望新的云不会与组中任何已经添加的精灵发生碰撞。我解决了这个问题,但我的解决方案使云长时间存在。我怎么能修好它?什么解决方案可以解决这个问题并更快地添加云 我的代码: class Cloud(pygame.sprite.Sprite): duplicate = False images = [load_image(f"cloud{i}.png") for i in range(1, 5)] def __init__(

我想在屏幕上制作10个左右的云,我希望新的云不会与组中任何已经添加的精灵发生碰撞。我解决了这个问题,但我的解决方案使云长时间存在。我怎么能修好它?什么解决方案可以解决这个问题并更快地添加云

我的代码:

class Cloud(pygame.sprite.Sprite):
    duplicate = False
    images = [load_image(f"cloud{i}.png") for i in range(1, 5)]

    def __init__(self, group, x=None, y=None, cloud_index=None):
        if cloud_index:
            self.image = Cloud.images[cloud_index]
            self.cloud_index = cloud_index
        else:
            self.image = random.choice(Cloud.images)
            self.cloud_index = Cloud.images.index(self.image)

        self.rect = self.image.get_rect()
        if not x or not y:
            # There is my solution
            while True:
                self.rect.x = self.x = random.randrange(WIDTH - self.rect.w)
                self.rect.y = random.randrange(HEIGHT - self.rect.h)

                if not pygame.sprite.spritecollideany(self, group) or not group.sprites():
                    break
        else:
            self.rect.x = self.x = x
            self.rect.y = y

        self.vel = 60 / FPS
        super(Cloud, self).__init__(group)

我不明白这是什么问题。您的解决方案似乎是这个问题的标准方法。@因为云很可能很大。因此,大多数随机位置都会导致交叉,需要很长时间才能找到一个位置。@Rabbid76好点。我想知道是否可以做得更少随机-即分割区域网格与细胞有云的大小,后来只选择网格中的随机细胞来放置云。或者不要在
random()
中使用所有值
x,y
,而是使用奇数值。@furas一个可能的解决方案是。好的算法在很大程度上取决于规模。这取决于云层的大小和云层需要分布的区域的大小,我不明白这是什么问题。您的解决方案似乎是这个问题的标准方法。@因为云很可能很大。因此,大多数随机位置都会导致交叉,需要很长时间才能找到一个位置。@Rabbid76好点。我想知道是否可以做得更少随机-即分割区域网格与细胞有云的大小,后来只选择网格中的随机细胞来放置云。或者不要在
random()
中使用所有值
x,y
,而是使用奇数值。@furas一个可能的解决方案是。好的算法在很大程度上取决于规模。这取决于云的大小和需要分布云的区域的大小。