找回密码
 立即注册
查看: 211|回复: 0

Python 游戏开发系列_2 精灵

[复制链接]
发表于 2024-7-15 18:31 | 显示全部楼层 |阅读模式
什么是精灵

精灵是屏幕上可以移动的计算机图像,你玩的2D游戏 上的所有显示物体或角色都可以称为精灵,精灵可以动画化,游戏玩家之间可以控制精灵进行互动。
我们这里主要介绍精灵在游戏循环里的重绘和衬着,Pygame 提供一个很好的方案 (精灵组) 去衬着精灵。
精灵组只是精灵的调集,你可以操作同时操作一个精灵组的精灵,声明一个精灵组,用来存放所有的精灵。
  1. # 声明精灵组
  2. all_sprites = pygame.sprite.Group()
  3. # 在游戏循环里更新和衬着重绘精灵
  4. all_sprites.update()
  5. all_sprites.draw(screen)
复制代码
新建精灵并加到精灵组后,精灵在游戏循环中就可以自动被重绘衬着到画面上。

创建精灵

此刻我们看如何创建精灵,在Pygame 模块里,精灵Sprite 是一个对象,我们创建一个玩家精灵担任Pygame Sprite,
  1. class Player(pygame.sprite.Sprite):
  2.     def __init__(self):
  3.         pygame.sprite.Sprite.__init__(self)    # 初始化父类
  4.         self.image = pygame.Surface((50, 50))  # image 和 rect 是Sprite 必需有的属性
  5.         self.image.fill(GREEN)                 # 创建一个50*50 像素的绿色方形作为我们的精灵
  6.         self.rect = self.image.get_rect()      # 把精灵放到一个矩形框里
  7.         self.rect.center = (WIDTH / 2, HEIGHT / 2)
复制代码
然后我们可以实例化Player 并添加到精灵组里,
  1. player = Player()
  2. all_sprites.add(player)
复制代码
精灵运动

我们在游戏循环里执行 精灵组的更新(all_sprites.update()),那么精灵组会寻找每个精灵的更新方式(update())去执行,所以我们要让我们的玩家精灵动起来,那么需要添加更新的方式。
因为我们是把精灵放在矩形框里的,我们先简单操作矩形框的位置更新玩家精灵的横坐标,每次循环对横坐标增加5个像素,当精灵移动超出屏幕宽度那么改变矩形框的位置从头循环。
  1.     def update(self):
  2.         self.rect.x += 5
  3.         if self.rect.left > WIDTH:
  4.             self.rect.right = 0
复制代码
矩形框有以下的属性:


基于上一篇文章的代码加上这里代码构成完整代码,
  1. # Pygame template - pygame 项目框架
  2. # 1,先倒入pygame 模块,定义一些常量
  3. import pygame
  4. import random
  5. WIDTH = 360  # 游戏窗口宽度
  6. HEIGHT = 480  # 游戏窗口高度
  7. FPS = 30  # 设置游戏30帧/秒
  8. # 定义颜色常量
  9. WHITE = (255, 255, 255)
  10. BLACK = (0, 0, 0)
  11. RED = (255, 0, 0)
  12. GREEN = (0, 255, 0)
  13. BLUE = (0, 0, 255)
  14. # 2,初始化pygame,设置游戏窗口
  15. pygame.init()
  16. pygame.mixer.init()  # 初始化声音措置
  17. screen = pygame.display.set_mode((WIDTH, HEIGHT))  # 设置游戏窗口
  18. pygame.display.set_caption(”My Game”)
  19. clock = pygame.time.Clock()  #
  20. class Player(pygame.sprite.Sprite):
  21.     def __init__(self):
  22.         pygame.sprite.Sprite.__init__(self)
  23.         self.image = pygame.Surface((50, 50))
  24.         self.image.fill(GREEN)
  25.         self.rect = self.image.get_rect()
  26.         self.rect.center = (WIDTH / 2, HEIGHT / 2)
  27.     def update(self):
  28.         self.rect.x += 5
  29.         if self.rect.left > WIDTH:
  30.             self.rect.right = 0
  31. player = Player()
  32. all_sprites = pygame.sprite.Group()
  33. all_sprites.add(player)
  34. # 3,措置游戏循环
  35. running = True
  36. while running:
  37.     # 设置正常的循环速度
  38.     clock.tick(FPS)
  39.     # 1)判断措置输入事件 (events)
  40.     for event in pygame.event.get():
  41.         # 查抄是否点击了封锁窗口(触发封锁事件)
  42.         if event.type == pygame.QUIT:
  43.             running = False
  44.     # 2)更新游戏
  45.     all_sprites.update()
  46.     # 3)衬着画面,显示画面
  47.     screen.fill(BLACK)  # 用黑色填充画面
  48.     all_sprites.draw(screen)
  49.     pygame.display.flip()
  50. pygame.quit()
复制代码
然后执行,游戏界面效果如下,实现精灵动起来。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 20:28 , Processed in 0.100405 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表