2

派生スプライト オブジェクトがあり、特定の条件を満たしたときにこのスプライトを削除したいと考えていました。スプライト クラス メソッド自体から 'pygame.sprite.Sprite.kill()' の形式で削除する際に問題はありますか?

class Pellet(pygame.sprite.Sprite):
  def __init__(self, tank):
  ...
  def update(self):
    """Update the position of bullets."""
    self.rect.move_ip(self.xposc, self.yposc)
    if offEdges(self.rect):
      self.kill()
4

1 に答える 1

2

スプライトを明確に削除したいだけであれば、これでうまくいくはずですが、オブジェクトを削除しようとすると、使用方法によっては 2 つの問題が発生する可能性があります。グループからのみオブジェクトの関数を呼び出すと、これはそれを取り除きます。クラスの特定のインスタンスから関数を呼び出すと、呼び出され続けます。これが、メンバーが 1 人しかいない場合でも、このような状況ではグループを使用する方がよい場合がある理由です。グループがすべてを処理してくれるからです。クラスのインスタンスを削除したい場合は、呼び出すことができます

self.__del__()

ただし、これにより、その変数から、またはその変数に対して何かを呼び出そうとすると、未定義になるという事実など、いくつかの問題が発生する可能性があります。グループを作成して kill() 関数を使用する方がはるかに優れています。すべてのグループからスプライトを削除したくない場合、もう 1 つの考えられる問題は粗いことです。この場合は、さまざまなグループから個別に削除できます。たとえば、レンダリング更新グループの場合は、次のようにすることができます。

<groupname>.remove(self)
于 2013-11-22T23:26:58.303 に答える