在【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)
运行效果:
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)