更多python相关的实战小项目以及学习资源,可关注微信公众号:noobcoders ,定期分享python学习笔记以及实战小项目,并附带详细的代码。
01
学习目标 1、理解游戏循环和游戏时钟
2、理解精灵和精灵组
02
开发环境 PyCharm2018.1.4
python2.7
pygame库
03
动手演练一、游戏中的动画原理
利用人眼的视觉停留,在游戏屏幕上快速地进行图像绘制,人眼分辨不出来便形成动画效果。
一般在电脑上每秒绘制60次,就能够实现高品质的连续的动画效果。
二、游戏循环的主要作用
1、保证游戏在正常情况下不会退出
2、在循环过程中,对图像位置不断
进行更新,形成动画效果
3、检测用户交互事件
三、游戏时钟
1、pygame库专门提供了一个 pygame.time .Clock类,利用这个类,只需两步我们就可以设置图像的刷新帧率。
(1) 创建一个时钟对象
(2) 时钟对象调用tick()方法
clock = pygame.time.Clock()
再在游戏循环中添加:
clock.tick(60) #设置刷新频率
四、英雄hero的简单动画实验
要求:
(1) 在初始化时定义一个hero_rect变量
记录英雄的pygame.Rect()
(2) 在游戏循环中,让hero的y-1,
实现向上移动
(3) 当y=0时,把英雄移动到屏幕底部
# 设置hero起始位置
hero_rect = pygame.Rect(200, 500, 102, 126)
hero_rect.y -= 1 # 对飞机位置进行移动
if hero_rect.y == 0:
hero_rect.y = 700
# 绘制图像
game_screen.blit(background, (0, 0))
game_screen.blit(hero, hero_rect)
五、游戏循环中监听事件
我们先了解一下什么是事件,什么是监听?
事件:就是游戏启动后,用户对游戏所做
的操作(点击鼠标,按下按键等)
监听:在游戏循环中,判断用户的具体操作
我们主要通过pygame.event.get()来获得当前用户的所有动作列表
# 捕获事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
print("游戏结束...")
pygame.quit()
exit()
六、精灵和精灵组
之前,图像的加载,位置变化,绘制等都是由编写代码实现的,为了简化开发步骤,pygame专门提供了两个类:
(1)pygame.sprite.Sprite
其主要用来存储图像数据
(2)pygame.sprite.Group
七、派生精灵子类
1、新建plane_sprites.py文件
2、定义GameSprite类,并且继承
pygame.sprite.Sprite
提示:如果一个类的父类不是object,重写方法时,需super().__init__(),
要注意如果解释器是python2.7版本,则需要加上类名
class GameSprite(pygame.sprite.Sprite):
def __init__(self, image_file, speed=1):
super(GameSprite, self).__init__()
self.image = pygame.image.load(image_file)
self.rect = self.image.get_rect()
self.speed = speed
def update(self):
self.rect.y += self.speed
八、使用精灵和精灵组创建敌机
要求:使用派生的精灵子类创建精灵组,实现敌机动画效果
步骤:(1)from planes_sprites import *
(2)创建精灵对象和精灵组对象
(3)在游戏循环中精灵组对象调用
update方法和draw方法
关键点:
精灵:封装图形image,位置rect,以及运动速度speed,并且提供update方法,更新位置rect
精灵组:可包含多个精灵对象,其调用update方法可以更新所有精灵位置rect,调用draw方法可在游戏屏幕game_screen绘制所有精灵图像
# 创建敌机精灵
enemy = GameSprite(".\image\enemy1.png")
enemy1 = GameSprite(".\image\enemy1.png", 2)
# 创建敌机精灵组
enemy_group = pygame.sprite.Group(enemy, enemy1)
# 对精灵调用update和draw方法
enemy_group.update()
enemy_group.draw(game_screen)
本次演练的代码,已上传至百度云,复制下面链接在浏览器打开
https://pan.baidu.com/s/1TVLQ3HYikja3QhcxzfcwIg
更多python相关的实战小项目以及学习资源,可关注微信公众号:noobcoders ,定期分享python学习笔记以及实战小项目,并附带详细的代码。