我们知道,游戏里的动画就是在短暂的时间里让窗口画面不断的变换图像。通过视觉的延迟来欺骗眼镜,让我们以为看到的是一个连续的动画。
想象我们的程序窗口有6个像素宽、1个像素高。除了4, 0位置的像素是黑色的外,所有的像素颜色都是白色的。窗口是这个样子:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200354.png)
如果我们同时把第3,0的位置改为黑色、4,0位置改为白色,窗口会展示成下面的样子:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200424.png)
对于用户来说,他看到的就是第四个黑色移动到了第三个黑色位置上。如果我们把2,0改为黑色,那真个程序给用户看起来就是一个动画了。
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200455.png)
对我们来说这是对话,但是对计算机来讲,它就是在很短的时间里渲染了三张不同图片而已。
下面,我们来做个例子演示猫捉老鼠的动画:
![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200517.png)
看代码:
```
import pygame, sys
from pygame.locals import *
pygame.init()
FPS = 30 # frames per second setting
fpsClock = pygame.time.Clock()
# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')
WHITE = (255, 255, 255)
# 加载一个猫的图片,这个后续会讲
catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
direction = 'right'
while True: # the main game loop
DISPLAYSURF.fill(WHITE)
if direction == 'right':
catx += 5
if catx == 280:
direction = 'down'
elif direction == 'down':
caty += 5
if caty == 220:
direction = 'left'
elif direction == 'left':
catx -= 5
if catx == 10:
direction = 'up'
elif direction == 'up':
caty -= 5
if caty == 10:
direction = 'right'
# 将图片渲染到窗口上
DISPLAYSURF.blit(catImg, (catx, caty))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# 更新窗口
pygame.display.update()
# 每秒多少桢
fpsClock.tick(FPS)
```
## 动画每秒的桢数和pygame.time.Clock对象
动画帧率是指我们程序每秒刷新图片的次数,通常被称为FPS。低帧率会让游戏显得很卡,我们一般设置为30即可。
`pygame.time.Clock` 对象帮助我们指定程序的最大帧率,如果我们不设置这个参数,游戏在一些电脑上会运行过快,导致用户反映不过来。我们调用Clock对象的tick方法来指定游戏帧率。
```
fpsClock = pygame.time.Clock()
fpsClock.tick(FPS)
```
需要注意的是,`fpsClock.tick(FPS)` 方法通常放在我们游戏主循环的最后一句,也就是`pygame.display.update()`的下面。这样,程序在每一次渲染画面的时候会跟进全面渲染画面的时间来调整当前渲染时间。
**阿达老师-孩子身边的编程专家**
*完整课程请关注阿达老师,主页里有完整的课程目录和观看地址*
- 课程介绍
- 搭建环境
- 什么是计算机
- 程序是怎么运行的
- 安装python
- 项目实例-安装IDE
- 变量和简单数据类型
- 数据&变量
- 数字
- 字符串
- 布尔类型
- 项目实例
- 容器-列表
- 容器
- 列表
- 项目实例
- 容器-字典
- 定义字典
- 项目实例
- 数据类型总结
- 条件语句
- python条件语句
- 项目实例
- 循环语句
- for循环
- while循环
- 项目实例
- 函数
- 5.0函数定义
- 5.2函数实战
- 6.文件系统
- 6.1 文件系统介绍&python查找文件
- 6.2 用python读写文件
- 7. python操作时间
- 8.面向对象
- 8.1 类和对象
- 8.2 继承和重写
- 8.3 面向对象项目实战
- 9 GUI编程
- 9.1 GUI基础
- 9.2 备忘清单GUI版
- 10.网络
- 10.1 网络的发展
- 10.2 python http
- 11.web开发
- 11.1 web基础&HTML
- 11.2 CSS&JavaScript
- 11.3 网页计算器
- 11.3 网站开发实战-播客搭建
- 11.3 python-web
- 12. 项目实战-数据处理
- 13. 项目实战-AI入门
- 13.1 环境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 动画基础 Animation
- 从0开始学python第14.5节 pygame 加载图片和声音
- 从0开始学python第14.6节 pygame.sprite(上)
- 14.7 pygame.sprite模块(下)
- 14.8 pygame射击游戏(一)
- pygame射击游戏(二)
- 14.8 pygame射击游戏(三)
- 14.8 pygame射击游戏(四)
- 14.8 pygame射击游戏(五)