私はPython 2とPygameを使ってシンプルな2Dゲームを作成しました。私は「敵のためにこのクラスを作成しました:Python pygame - オフスクリーンのスプライトを削除する
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)
次にdrawメソッドでは、私はちょうどself.all_sprites.draw()
ゲームを記述します。次に
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
、私は敵のインスタンスを作成したスレッドを持っています無限のランナーであり、すべてのフレームは敵が数ピクセル下に移動します。問題は、ブロックがオフスクリーンになってからゲームが少し遅れると、スプライトが削除されないということです。 オフスクリーンインスタンスを自動的に削除する方法はありますか?
私は以下を試みましたが、画面上のすべての敵を削除しました。
if self.rect.y >= WIDTH:
self.rect.kill()
ここでは、簡単で不完全ですが実行可能な例を示します。 – furas
あなたのスレッドで 'Enemy(game)'を何百回も実行するので、何百万ものオブジェクトをメモリに作成します。 – furas
read [pygame.sprite.Group()](http://pygame.org/docs/ref/sprite.html)doc - すべてのスプライトのリストを取得する 'self.all_sprites.sprites()'と 'グループから要素を削除するには、self.all_sprites.remove(sprite_object) 'を実行します。 – furas