python笔记系列-day18: pygame.time.Clock 控制动画帧速率

在【python笔记系列-day16: Pygame 登场 】 中借用了 python官方文档中的例子 有一个球的动画展示

但是运行那个程序的时候你会发现球是在屏幕上闪烁的,速度很快。

我们程序想控制下 帧的刷新速率使动画能够以一个平稳的速率运行就要借助  pygame.time.Clock 了

详细的使用方法参考官方文档:

https://www.pygame.org/docs/ref/time.html#pygame.time.Clock

 

我们编写一个 Cat.py 的程序来让一只猫在界面上以 30帧每秒的速率进行移动

例如这只 猫 :  cat.png

 

参考上节球的移动方法

球的移动我们是装载图片之后 然后获取图形对象的  矩形对象,然后通过移动矩形对象,再把图片重新复制到surface对象中

达到图片移动效果. 

本次使用 Clock对象控制图片帧刷新速度

使用如下代码创建出一个 Clock对象

fpsClock = pygame.time.Clock()

图片的移动本次可以通过 坐标的移动方法进行,不用矩形对象的移动了

## 坐标移动方法
DISPLAYSURF.blit(catImg, (catx, caty))

##对比使用矩形区域
DISPLAYSURF.blit(catImg, catRect)

图片移动的时候可以更改移动  的  x 和  y 坐标来达到移动的目的。

让猫沿着屏幕顺时针走,当走到屏幕边缘时候需要更改移动方向,通过修改 x和y坐标的值

向右移动:  x 增加

向下移动 :  y 增加

向左移动 : x 减少

向上移动: y 减少

 

要说明的是:  

pygame.img.load() 函数接收一个图片路径字符串,返回的是一个 surface 对象,注意是 surface对象

                               不是  img对象哦 , 这个图片的surface对象和 显示的 surface 对象是不同的

blit() 函数是位图复制函数,将一个surface 对象上的内容复制到另一个surface对象上

destSurface.blit(srcSurface,复制到的位置)

 

 

更新帧显示速率,要在  surface 对象 更新显示之后调用如下代码:

## FPS=30 
fpsClock.tick(FPS)

运行效果:

 

cat.py

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('Cat')

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)

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值