美文网首页
玩蛇系列之Pygame教程(三)-- 动画

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

作者: 峰峰小 | 来源:发表于2016-11-16 20:49 被阅读781次
    动画的原理

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

    运行结果:

    相关文章

      网友评论

          本文标题:玩蛇系列之Pygame教程(三)-- 动画

          本文链接:https://www.haomeiwen.com/subject/wmylpttx.html