2016-04-30 56 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

對不起,我很糟糕的解釋代碼,但這似乎工作!我不知道我是怎麼想的,也許我需要休息一下。不管怎麼說,還是要謝謝你! –