动画的原理
由于人类眼睛的特殊生理结构,如果所看画面之帧率高于24的时候,就会认为是连贯的,此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。
-
帧率(Frame rate)
是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简称:FPS)
每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为显示器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。
加上我们有的坐标系,可以在原有基础上添加偏移量,再重新绘制,依次一张一张的循环绘制下去,就会得到我们想要的物体移动的效果。
举个例子:
我们依次移动黑色方块,在相同的间隔时间里,也就形成了动画
pygame实现动画
主要用到的方法:
pygame.image.load(filename)
加载一张图片pygame.Surface.blit(source, dest, area=None, special_flags = 0)
将图片绘制到屏幕相应坐标上(后面两个参数默认,可以不传)pygame.time.Clock()
获得pygame的时钟
-
pygame.time.Clock.tick(FPS)
设置pygame时钟的间隔时间
这里提供一张猫的图片:
cat.png
以下为示例代码:
# -*- coding: UTF-8 -*-
'''
Created on 2016年11月16日
@author: 小峰峰
'''
import pygame, sys# 声明 导入需要的模块
from pygame.locals import *
pygame.init()# 初始化pygame
FPS = 30 # 设置帧率(屏幕每秒刷新的次数)
fpsClock = pygame.time.Clock() # 获得pygame的时钟
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: # 程序主循环
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时钟的间隔时间
运行结果: