我正在创造一个游戏,玩家可以上下移动,并且当他们从屏幕右侧移动到左侧时必须躲避物品。但是,一旦项目关闭屏幕,我想删除它。我已经尝试使用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
答案 0 :(得分:2)
在for
循环中,您循环遍历集合self.LevelList
,但是当您想要删除精灵时,请将其从集合self.all_sprites
中删除。
我猜self.LevelList
和self.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()
(我假设,因为你谈论精灵组,你用它们来绘制/更新你的精灵)