从 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
我通过将精灵移出屏幕找到了解决此问题的方法,但我想知道是否有更合乎道德的方法来解决它,例如将其从 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