400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Pygame的基本使用——使用Sprites(精灵)类

【Python基础知识】Pygame的基本使用——使用Sprites(精灵)类

  • 来源:优就业
  • 2021-09-28 09:51:42
  • 阅读()
  • 分享
  • 手机端入口

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

在游戏循环的更新和渲染部分,需要更新和渲染精灵,但是可以想象,如果游戏中包含大量精灵,那么游戏循环的这些部分可能会变得非常漫长而复杂。

Pygame为此提供了一个很好的解决方案:Sprite Group (精灵组)。

创建一个精灵组来容纳游戏中所有的精灵:

  1. all_sprites = pygame.sprite.Group() 

现在可以通过在游戏循环中添加以下内容来利用该精灵组:

  1. # 更新游戏 
  2. all_sprites.update() 
  3.  
  4. # 渲染 
  5. screen.fill(WHITE) 
  6. all_sprites.draw(screen) 

对于创建的每个精灵,只需确保将其添加到all_sprites精灵组中,它将自动在游戏窗口上绘制并在每次循环中进行更新。

(1)创建精灵

现在开始创建第一个精灵。在Pygame中,精灵是对象。首先在template.py中定义精灵类Player,类中定义__init__()方法,其中每个精灵都必须有两个属性,分别是image(图像)和rect(矩形),并将其初始化:

  1. class Player(pygame.sprite.Sprite):   # 继承pygame中的Sprite类 
  2.     def __init__(self): 
  3.         pygame.sprite.Sprite.__init__(self
  4.         self.image = pygame.Surface((3030)) 
  5.         self.image.fill(BLUE) 
  6.         self.rect = self.image.get_rect() 
  7.         self.rect.centerx = WIDTH / 2 
  8.         self.rect.centery = HEIGHT - 30 

其中,定义了图像属性——只是创建了一个简单的30*30的正方形,并用蓝色填充。还定义了矩形属性,get_rect()用于查看图像并计算将其包围的矩形。在Pygame中,可以使用矩形来跟踪对象的坐标,也可以使用矩形将对象放置在游戏窗口上的任意位置。

再创建第二个精灵,这是一个50*50的正方形,并用红色填充:

  1. class Player1(pygame.sprite.Sprite): 
  2.     def __init__(self): 
  3.         pygame.sprite.Sprite.__init__(self
  4.         self.image = pygame.Surface((5050)) 
  5.         self.image.fill(RED) 
  6.         self.rect = self.image.get_rect() 
  7.         self.rect.centerx = WIDTH / 2 
  8.         self.rect.centery = HEIGHT / 2 

然后分别创建Player类的实例player和Player1类的实例player1,还需要将player和player1添加到all_sprites精灵组中:

  1. all_sprites = pygame.sprite.Group() 
  2. player = Player() 
  3. player1 = Player1() 
  4. all_sprites.add(player, player1) 

最后进行渲染部分,在游戏循环的“screen.fill(WHITE)”代码下面添加如下代码:

  1. all_sprites.draw(screen) 

运行结果如图1所示。

图1 创建精灵的运行结果

(2)移动精灵

游戏循环显示每一帧,如果需要移动精灵,那么需要在精灵类Player中添加update()方法来更新精灵的位置:

  1. def update(self): 
  2.     self.rect.x += 3 

上述代码的update()方法很简单,就是使精灵矩形的x坐标增加3个像素,即向游戏窗口右边移动3个像素。每次游戏循环,都会调用update()方法,精灵会一直右移。但是这样有个缺点,当精灵移动到游戏窗口最右边时,就会消失不见。可以改动update()方法的代码,使得当精灵移动到最右边时,回到最左边继续移动:

  1. def update(self): 
  2.     self.rect.x += 3 
  3.     if self.rect.left > WIDTH: 
  4.         self.rect.right = 0 

同样,在Player1类中添加update()方法,使精灵矩形向游戏窗口左边移动2个像素,当精灵移动到最左边时,回到最右边继续移动:

  1. def update(self): 
  2.     self.rect.x -= 2 
  3.     if self.rect.left < 0
  4.         self.rect.right = WIDTH 

all_sprites是一个精灵组,对该组进行更新,就是对组中每一个精灵进行更新。在游戏循环中,精灵组all_sprites调用update()方法,则组中每一个精灵将自动在游戏窗口上绘制并在每次循环中进行更新:

  1. all_sprites.update() 

运行结果如图2所示。

图2 移动精灵的运行结果

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,享学习福利
QQ交流群
在线疑问解答
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
享学习福利

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道