我用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