从 Pygame.Group 中删除在循环中声明的精灵

Removing a sprite from Pygame.Group which is declared in a loop

我通过将精灵移出屏幕找到了解决此问题的方法,但我想知道是否有更合乎道德的方法来解决它,例如将其从 sprite.group 中移除。我已经尝试过了,但是因为硬币是在 if 语句中声明的,所以它只是将自己添加回屏幕。

该代码是我程序中控制硬币的部分的快速摘要。 'player' 由用户控制。 在我更新的代码中,我在 coin.rect.collide if 语句中将硬币移出了屏幕。

Class Coin (pygame.sprite.Sprite):
      def __init__(self, x, y):
      super().__init__()

      self.image = image

      self.rect = get rect 
      self.rect.x = y
      self.rect.y = y

class room1(Room):
     def __init__(self):
         Room.__init__(self)

class player (pygame.sprite.Sprite):
     def __init__(self,x,y):
         super().__init__()

         self.image = pygame.image.load ('playerimg.png')
         self.rect = self.image.get_rect()
         self.rect.x = x
         self.rect.y = y

def mainLoop():
    global coin
    coin= Coin(10,10)
    spritegroup = pygame.sprite.group

    gameLoop = 1
    while gameLoop ==1:
         #keyboard controls
         #room changing code

         if room1 == 2:

             if coin.rect.coliderect(player.rect):
                  spritegroup.remove(coin)

             spritegroup.add(coin)


         spritegroup.draw(screen)
         spritegroup.update()

如您所写,只要room1 == 2,每次迭代都会向精灵组添加一个硬币。如果你把房间里的所有物品只放一次会怎样?

room1IsLoaded = False

while gameLoop == 1:
  if not room1IsLoaded:
    spritegroup.add(coin)
    room1IsLoaded = True