玩蛇系列之Pygame教程(三)-- 动画

动画的原理

由于人类眼睛的特殊生理结构,如果所看画面之帧率高于24的时候,就会认为是连贯的,此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。

  • 帧率(Frame rate)
    是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简称:FPS)

每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为显示器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。

加上我们有的坐标系,可以在原有基础上添加偏移量,再重新绘制,依次一张一张的循环绘制下去,就会得到我们想要的物体移动的效果。

举个例子:
我们依次移动黑色方块,在相同的间隔时间里,也就形成了动画

玩蛇系列之Pygame教程(三)-- 动画_第1张图片
玩蛇系列之Pygame教程(三)-- 动画_第2张图片
玩蛇系列之Pygame教程(三)-- 动画_第3张图片
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时钟的间隔时间
    

运行结果:

玩蛇系列之Pygame教程(三)-- 动画_第4张图片
玩蛇系列之Pygame教程(三)-- 动画_第5张图片
玩蛇系列之Pygame教程(三)-- 动画_第6张图片
玩蛇系列之Pygame教程(三)-- 动画_第7张图片

你可能感兴趣的:(玩蛇系列之Pygame教程(三)-- 动画)