太空射击 第02课:使用精灵

视频
观看视频
第 02 课:使用精灵
这是我们“使用进行游戏开发”教程系列的第 2 部分 。您应该从第 1 部分开始:入门
什么是精灵?
是一个计算机图形术语,指屏幕上可以移动的任何对象 。当您玩任何2D游戏时,您在屏幕上看到的所有对象都是精灵 。精灵可以是动画的,它们可以由玩家控制,甚至可以相互交互 。
我们将在游戏循环的更新和绘制部分中负责更新和绘制精灵 。但您可能可以想象,如果您的游戏具有大量精灵,那么游戏循环的这些部分可能会变得非常长且复杂 。幸运的是,对此有一个很好的解决方案:精灵组 。
精灵组只是一个精灵的集合,您可以同时对它们执行所有操作 。让我们创建一个精灵组来保存游戏中的所有精灵:
clock = pygame.time.Clock()all_sprites = pygame.sprite.Group()
现在,我们可以通过在循环中添加以下内容来利用该组:
# Updateall_sprites.update()# Draw / renderscreen.fill(BLACK)all_sprites.draw(screen)
现在,对于我们创建的每个精灵,我们只需确保将其添加到精灵组中,它就会自动绘制在屏幕上,并且每次通过循环进行更新 。
创建一个精灵
现在我们准备制作我们的第一个精灵 。在中,精灵是对象 。它是将数据和代码分组到单个实体中的便捷方法 。起初可能有点令人困惑,但幸运的是,精灵是练习对象并习惯它们工作方式的好方法 。
我们首先定义我们的新精灵:
class Player(pygame.sprite.Sprite):
class告诉我们正在定义一个新类,它将是玩家精灵,其类型是..,这意味着它将基于的预定义类
我们在class定义中第一位代码是()特殊函数,它定义了每当创建此类型的新对象时将运行哪些代码 。每个必须具有两个属性:一个image和一个rect :
关于对象的介绍可以参考这里的介绍:网址
class Player(pygame.sprite.Sprite):def __init__(self):# super().__init__() # 也可这样,只是没有参数selfpygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((50, 50))self.image.fill(GREEN)self.rect = self.image.get_rect()
第一行...(self)是所必需的,它运行内置的类初始值设定项 。接下来,我们定义 image属性,在这里,我们只是创建一个,它是50 x 50正方形并用GREEN颜色填充它 。稍后,我们将学习如何用 image创建精灵,例如角色或宇宙飞船,但现在一个固定大小的正方形已经足够了 。
接下来,我们必须定义精灵的rect,它是“矩形”的缩写 。在中,矩形无处不在,以跟踪对象的坐标 。()命令计算image的矩形 。
我们可以使用rect 将精灵放在屏幕上的任何位置 。让精灵开始就出现在屏幕中间:
class Player(pygame.sprite.Sprite):def __init__(self):# super().__init__() # 也可这样,只是没有参数selfpygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((50, 50))self.image.fill(GREEN)self.rect = self.image.get_rect()self.rect.center = (WIDTH / 2, HEIGHT / 2)
现在我们已经定义了精灵,我们需要通过创建类的实例来“生成”它 。我们还需要确保将添加到组中:
all_sprites = pygame.sprite.Group()player = Player()all_sprites.add(player)
现在,如果您运行程序,您将在屏幕中心看到绿色方块 。继续并增加WIDTH和的设置,以便您将有足够的空间让精灵在下一步中移动 。