2016-04-30 29 views
0

我已经通过将精灵从屏幕上移开找到了解决此问题的解决方案,但我想知道是否有一种更符合道德的方式来解决它,例如将它从sprite.group。我已经尝试过,但是因为硬币是在if语句中声明的,所以它只是将自己添加回屏幕。从循环中声明的Pygame.Group中删除精灵

该代码是控制硬币的程序部分的快速总结。 '玩家'由用户控制。 在我更新的代码中,我将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() 
+0

嗯,在'mainLoop'函数中没有循环。我认为在试图简化问题的代码时,可能会简化太多,代码不再显示您遇到的问题。请制作一个实际显示您的问题的[MCVE](http://stackoverflow.com/help/mcve)。 – Blckknght

+0

哦,对不起。我在gameLoop中编辑并移动了一些代码。希望它现在显示问题。 –

回答

0

正如你所写的那样,只要room1 == 2在每次迭代中都会在精灵组中添加一个硬币。如果你把所有的东西放在房间里一次?

room1IsLoaded = False 

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

对不起,我很糟糕的解释代码,但这似乎工作!我不知道我是怎么想的,也许我需要休息一下。不管怎么说,还是要谢谢你! –