从循环中声明的Pygame.Group中删除精灵
问题描述:
我已经通过将精灵从屏幕上移开找到了解决此问题的解决方案,但我想知道是否有一种更符合道德的方式来解决它,例如将它从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()
答
正如你所写的那样,只要room1 == 2
在每次迭代中都会在精灵组中添加一个硬币。如果你把所有的东西放在房间里一次?
room1IsLoaded = False
while gameLoop == 1:
if not room1IsLoaded:
spritegroup.add(coin)
room1IsLoaded = True
+0
对不起,我很糟糕的解释代码,但这似乎工作!我不知道我是怎么想的,也许我需要休息一下。不管怎么说,还是要谢谢你! –
嗯,在'mainLoop'函数中没有循环。我认为在试图简化问题的代码时,可能会简化太多,代码不再显示您遇到的问题。请制作一个实际显示您的问题的[MCVE](http://stackoverflow.com/help/mcve)。 – Blckknght
哦,对不起。我在gameLoop中编辑并移动了一些代码。希望它现在显示问题。 –