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

动画的原理

由于人类眼睛的特殊生理结构,如果所看画面之帧率高于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时钟的间隔时间
    

运行结果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式。 什么是...
    胖花花阅读 26,214评论 21 242
  • 什么是动画 动画,顾名思义,就是能“动”的画。 人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切...
    CoderSC阅读 1,316评论 0 1
  • 动画,顾名思义,就是能“动”的画。人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切换时,就会被认...
    彬_仔阅读 1,673评论 1 8
  • 1. pyspider的介绍; 2. 爬虫架构的典型设计; 3. 垂直搜索引擎的初探。 PySpider 之前的爬...
    蝴蝶兰玫瑰阅读 399评论 0 2
  • 时序已秋令, 周遭暑气蒸。 遍寻浓荫里, 尽是一片青! 无秋 南国日落晚, 盛夏意正酣。 待到枯叶落, 天令已大寒。
    平天下之文世界阅读 147评论 2 2