(天学网:学英语)学好精灵的基本知识

(天学网:学英语)学好精灵的基本知识

Asprite 是一个计算机图形术语,指屏幕上可以移动的任何对象。 当您玩任何 2D 游戏时,您在屏幕上看到的所有对象都是精灵。 精灵可以是动画的,它们可以由玩家控制,甚至可以相互交互。

我们将在游戏循环的更新和绘制部分负责更新和绘制精灵。 但您可能可以想象,如果您的游戏有大量精灵,那么游戏循环的这些部分可能会变得非常长且复杂。 幸运的是,Pygame对此有一个很好的解决方案:thesprite group。

精灵组只是您可以同时对所有精灵进行操作的集合。 让我们创建一个精灵组来保存游戏中的所有精灵:

精灵/角色

精灵是指屏幕上对象的计算机图形名称。 在二维游戏中,屏幕上的物体都是精灵。 精灵可以作为动画对象,玩家可以控制精灵,精灵之间可以连接或交互。

精灵的更新和绘制分别在游戏循环(GameLoop)中的UPDATE和DRAW模块中进行。 有一个问题。 如果游戏中有大量的精灵,游戏循环代码就会又长又复杂。 Pygame中有一个解决方案:使用精灵组。

精灵群是一群可以同时在屏幕上移动的精灵。 在代码中,我们可以将精灵添加到精灵组中。

clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()

在游戏循环中,我们可以添加以下代码

# Update
all_sprites.update()

# Draw / render
screen.fill(BLACK)
all_sprites.draw(screen)

现在,对于我们创建的每个精灵,我们只需确保将其添加到 all_spritesgroup 中,它将自动绘制在屏幕上并每次通过循环进行更新。

所有新创建的精灵都可以添加到 all_sprites 组中,您不必担心在屏幕上显示和更新它们。

创建精灵

现在我们准备制作我们的第一个精灵。 在 Pygame 中,精灵是对象。 如果您以前没有使用过 Python 中的对象,它们是将数据和代码分组为单个实体的便捷方法。 一开始可能有点令人困惑,但幸运的是,Pygame 精灵是练习对象并习惯它们工作方式的好方法。

我们首先定义新的精灵:

创建一个新的精灵

我们将创建我们的第一个精灵。 在 Pygame 中,精灵是对象。 Python中的对象是单个实体(Entity),这是一种将数据和方法组装成一个实体的更方便的方法。 如果您一开始对这些对象不熟悉音效,请不要担心。 逐渐地,您将了解这些对象并熟悉如何使用它们。 接下来我们定义一个新的精灵:

class Player(pygame.sprite.Sprite):

class告诉Python我们正在定义一个新对象,它将成为我们的玩家精灵,它的类型是pygame.sprite.Sprite,这意味着它将基于Pygame的预定义Sprite类。

类键告诉 Python 我们要定义一个新对象。 这个对象是我们的玩家精灵,其类型为 pygame.sprite.Sprite (基于 Pygame 中预定义的类 Sprite)

类定义中我们需要的第一段代码是特殊的 __init__() 函数,它定义了每当创建该类型的新对象时将运行的代码。 每个 Pygame sprite 还必须具有两个属性:animage 和 areect:

在类的定义中,有一个特殊的函数__init__()3D角色,它是一个初始化函数。 创建对象时,首先运行此处编写的代码。 它还有两个属性:image、rect。

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(GREEN)
self.rect = self.image.get_rect()

第一行 pygame.sprite.Sprite.__init__(self) 是 Pygame 所必需的 - 它运行内置的 Spriteclasses 初始值设定项。 接下来,我们定义 image 属性 - 在本例中,我们只是创建一个简单的 50 x 50 正方形并用绿色填充它。 稍后我们将学习如何使精灵的图像变得更奇特,例如角色或宇宙飞船,但现在一个实心正方形就足够了。

pygame.sprite.Sprite.__init__(self)是Pygame的内置类初始化器,然后定义图像属性,创建一个50X50的正方形,填充绿色。 它可以填充主角图像和宇宙飞船。 让我们先用单一颜色填充它。

接下来,我们必须定义精灵的矩形,它是“矩形”的缩写。 Pygame 中到处都使用矩形来跟踪对象的坐标。 get_rect() 命令只是查看图像并计算将其包围的矩形。

接下来,我们定义 rect 属性,它是 Rectangle 的缩写。 Pygame中的矩形主要跟踪物体的坐标。 get_rect 命令查找图像属性并计算包围矩形的位置参数。

我们可以使用该矩形将精灵放置在屏幕上我们想要的任何位置。 让我们从中心的精灵开始:

我们将其放置在屏幕中央:

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.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)

现在我们已经定义了 Player 精灵,我们需要通过创建 Player 类的实例来“生成”(即创建)它。 我们还需要确保将精灵添加到 theall_spritesgroup 中:

定义玩家精灵后,我需要创建(实例化)玩家类并将其添加到 all_sprites 组中。

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

现在游戏设计入门,如果您运行程序,您将在屏幕中央看到绿色方块。 继续增加程序的宽度和高度设置,以便您有足够的空间供精灵在下一步中移动。

现在尝试运行该程序,屏幕中央会出现一个绿色方块。 尝试修改WIDTH和HEIGHT这两个常量,比如增大这两个值,让玩家有更多的操作空间。

游戏设计入门_入门设计游戏有哪些_入门设计游戏软件

精灵运动

请记住,在游戏循环中,我们有 theall_sprites.update()。 这意味着对于组中的每个精灵,Pygame 将查找 update() 函数并运行它。 因此,为了让我们的精灵移动,我们只需要定义它的更新规则:

精灵动作

请记住,在游戏循环中,我们有一个名为 all_sprites.update() 的方法,对于组中的所有精灵,Pygame 将查找 update() 函数并运行它。 所以为了让精灵移动,我们需要定义更新规则:

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.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)

def update(self):
self.rect.x += 5

这意味着每次游戏循环中游戏设计入门,我们都会将精灵的 x 坐标增加 5 个像素。 继续运行它,你会看到精灵头部离开屏幕右侧:

上面代码的作用是,在游戏循环中,我们每次将精灵的x坐标增加5个像素。 运行程序,你会看到精灵向右移动并消失。

入门设计游戏有哪些_游戏设计入门_入门设计游戏软件

让我们通过使精灵环绕来解决这个问题 - 每当它到达屏幕的右侧时,我们都会将其移动到左侧。 我们可以通过使用精灵矩形上的一个方便的“句柄”来轻松地做到这一点:

让方块水平往复运动,当碰到屏幕右边缘时,通过代码将其向左移动。 如下所示,我们可以使用 rect sprite 属性。

入门设计游戏软件_游戏设计入门_入门设计游戏有哪些

因此,如果矩形的左边缘超出屏幕,我们会将右边缘设置为 0:

当精灵向右移动时,只需通过代码将其放置到左侧即可。

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.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)

def update(self):
self.rect.x += 5
if self.rect.left > WIDTH:
self.rect.right = 0

现在我们可以看到精灵将环绕屏幕:

下面我们可以看到精灵在屏幕上往复运动。

游戏设计入门_入门设计游戏有哪些_入门设计游戏软件

这就是本课的内容。 继续进行实验 - 请注意,您在精灵的 update() 方法中放入的任何内容都会在每一帧发生。 尝试使精灵上下移动(更改 y 坐标)或使其从墙上弹起(当矩形到达边缘时反转方向)。

这就是本课的内容。 我们鼓励您尝试以下修改:使精灵上下移动(修改其 y 坐标)或使其在屏幕上弹跳。

在下一个教程中,我们将向您展示如何为您的精灵使用艺术 - 将其从普通正方形更改为动画角色。

下一课我们将讲解如何为精灵添加卡通图片。

文章来源:http://mp.weixin.qq.com/s?src=11×tamp=1712485678&ver=5186&signature=sbhyFLcBeMhYSroYuM6ZXZP-RHMtSC18HJj9S*zTMojbbtLxRj72oB4BnBgRfDejYtyCVBvjYyU-j5INCwYKxnFZYb1xJV-uyJNgFpz96L0ZH2VzwIWPHHdvKWCZ7zoM&new=1