我用python 2和pygame创建了一个简单的2D游戏,您必须避免正在向下移动的方块。我对“敌”创建这个类:Python pygame - 删除屏幕外精灵
class Enemy(pygame.sprite.Sprite):
def __init__(self, game):
self.groups = game.all_sprites
pygame.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = pygame.Surface((TILESIZE + 10, TILESIZE + 10))
self.image.fill(ENEMY_COLOR)
self.rect = self.image.get_rect()
self.x = random.uniform(0, WIDTH - TILESIZE)
self.rect.x = self.x
self.y = 0
def update(self):
if self.rect.colliderect(self.game.player.rect):
self.game.deaths += 1
self.game.score = 0
self.game.run()
self.rect.y += (self.game.score + 500)/50
然后,我有一个创建了敌人的一个实例,一个线程:
class Create_Enemy(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
while not game.game_paused:
time.sleep((game.score + 1)/game.speed)
Enemy(game)
然后在抽签方法我只是写self.all_sprites.draw()
游戏是一个无限的亚军,敌人的每一帧都会向下移动几个像素。问题在于,稍后游戏变得迟缓,因为当块离屏时,精灵不会被删除。 有没有办法自动删除屏幕外的实例?
我试过以下,但它只是删除屏幕上的所有敌人。
if self.rect.y >= WIDTH:
self.rect.kill()
我想我可以做类似game.all_sprites.pop(1)
(0位置是播放器),但我无法找到一个方法来存档类似的东西...
您可以在没有'Thread'的情况下执行此操作,以获得更好的控制。 – furas
在你的线程中运行'Enemy(游戏)'数百万次,所以你在内存中创建了数百万个对象。 – furas
阅读[pygame.sprite.Group()](http://pygame.org/docs/ref/sprite.html)doc - 你有'self.all_sprites.sprites()'得到所有精灵的列表,'' self.all_sprites.remove(sprite_object)'从组中删除元素。 – furas