精灵没有从pygame中删除

时间:2018-01-23 21:28:27

标签: python memory pygame

我正在创造一个游戏,玩家可以上下移动,并且当他们从屏幕右侧移动到左侧时必须躲避物品。但是,一旦项目关闭屏幕,我想删除它。我已经尝试使用del并将其从我用于绘制的精灵组中删除(在搜索堆栈溢出后),但我认为它不起作用。谢谢。

for block in self.LevelList: #inside event loop
        if block.rect.x < 0:
            self.all_sprites.remove(block)
self.levY = random.choice(self.yList)
self.LevelList.append(Block(self,0,0,18,171,self.levX,self.levY))
self.levX += 100

self.all_sprites.add(self.LevelList)
class Block(pg.sprite.Sprite): #inside settings doc
def __init__(self,game,x,y,width,height,xpos,ypos):
    pg.sprite.Sprite.__init__(self)
    self.game = game
    self.image = self.game.BlockSheet.get_image(x,y,width,height)
    self.rect = self.image.get_rect()
    self.rect.x = xpos
    self.rect.y = ypos

def update(self):
    self.rect.x -= 1 

1 个答案:

答案 0 :(得分:2)

for循环中,您循环遍历集合self.LevelList,但是当您想要删除精灵时,请将其从集合self.all_sprites中删除。

我猜self.LevelListself.all_sprites不是同一个集合,因此从self.all_sprites删除精灵并不会将其从self.LevelList中删除。

如果你想保留两个集合,请确保它们都是精灵组,然后简单地调用kill(),例如:

for block in self.LevelList: #inside event loop
    if block.rect.x < 0:
        block.kill()

因为kill()将从其所有精灵组中删除精灵。

另外,你可以在精灵本身的更新方法中进行检查,例如:

def update(self):
    self.rect.x -= 1 
    if self.rect.x < 0:
        self.kill()

(我假设,因为你谈论精灵组,你用它们来绘制/更新你的精灵)