pygame.sprite.Group()如何知道要调用哪个sprite组?同时调用精灵组也调用类



你好,我正在开发AlienInvasion游戏,我对pygame.sprite.Group有点困惑。它如何知道该调用哪个pygame.sprite.Group()

我习惯于引用这样的类
self.ship = Ship(self)

但这个人这样称呼它。它怎么知道自己在调用哪个精灵组?我目前只有一个精灵组ATM,所以这是有道理的,但如果我有更多呢
self.bullets = pygame.sprite.Group()

然后稍后我可以从中引用这样的方法
self.bullets.update()

class AlienInvasion:
"""Overall class to manage game assets and behavior."""
def __init__(self):
"""Initialize the game, and create game resources."""
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))
pygame.display.set_caption("Alien Invasion")
self.ship = Ship(self)
self.bullets = pygame.sprite.Group()

def _update_bullets(self):
"""update position of bullets and get rid of old bullets"""
# update bullet positions 
self.bullets.update()
class Bullet(Sprite):
"""A class to manage bullets fired from the ship"""
def __init__(self, ai_game):
"""Create a bullet object at the ship's current position."""
super().__init__()
self.screen = ai_game.screen
self.settings = ai_game.settings
self.color=self.settings.bullet_color

当你这样做时:

self.bullets = pygame.sprite.Group()

您正在创建一个新的Group对象,并将其指定给当前对象上的属性bullets。该组不知道它是从哪里引用的。当你开始向它添加精灵时,它会跟踪这些精灵。这是Group对象的工作,它就像list或其他容器。Group有一些专门的方法,可以让你一次与多个精灵交互(比如Group.update(),它在它包含的每个精灵上调用update()(。

Bullet类中不显示任何将它们添加到Group中的代码。这意味着您的项目符号实际上还不会包含在您命名为bulletsGroup中。也许您应该对每个项目符号都这样做,因为它是创建的。您可能想要这样的东西(为了简洁起见,删除了文档字符串(:

class Bullet(Sprite):
def __init__(self, ai_game):
super().__init__(ai_game.bullets)           # pass the group here!
... # do the rest of your initialization

Sprite.__init__方法接受任意数量的参数,预计为Groups。它将新创建的sprite添加到每个组中,这听起来正是您想要的。

Sprite类还有另一种与Group交互的有用方法,您可能希望稍后在代码中使用它:Sprite.kill()将精灵从其所有组中删除,如果精灵不再与您的游戏相关(例如,一颗子弹没有击中目标并飞离屏幕(,这很方便。

最新更新