帧动画图片:

import sys,pygame pygame.init() #初始化pygame类 screen = pygame.display.set_mode((600,800)) #设置窗口大小 pygame.display.set_caption('动画测试') #设置窗口标题 image = pygame.image.load('512x126.png') #加载图片,这里一定要正确填写图片路径,如果和py文件在同目录下则直接写文件名(带上文件类型) tick = pygame.time.Clock() frameNumber = 6 #设置帧数,示例图片有6帧 frameRect = image.get_rect()#获取全图的框体数据,以此计算单帧框体 frameRect.width //= frameNumber #获取每一帧的边框数据,实例图片之只有一行,所以单帧高度和整体图片高度相等 fps = 10 #设置刷新率,数字越大刷新率越高,但因为示例图片只有6帧所以建议设低一点 否则闪的太凶。 fcclock = pygame.time.Clock() n = 0 #这算是一个magic number吧,是为了计算框体位置所引用的一个计算变量,实在懒得想名字了。 while True: for event in pygame.event.get(): #事件检测,如果点击右上角X,则程序退出,没有这个循环的话,窗口可能会在打开时闪退。 if event.type == pygame.QUIT: sys.exit() if n < frameNumber: frameRect.x = frameRect.width * n #这里通过移动单帧矿体的x轴坐标实现单帧框体位移 n += 1 else: n = 0 screen.fill((255,255,255))#设置背景为白色 screen.blit(image, (0,0),frameRect)#这里给了3个实参,分别是图像,绘制的位置,绘制的截面框 fcclock.tick(fps) #设置图像刷新率,如果刷新率太高,图像闪的太厉害 pygame.display.flip() #刷新窗口
pygame用blit()实现动画效果的示例代码
pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已。
原理其实很简单,有点像我们做地铁的时候隧道里的广告一样。我们设置一个窗口。然后让窗口在一个画着很多帧图像的图上面移动,当我们透过这个窗口去观察这幅图的时候,只要窗口沿着一个方向去运动,那么就会产生动画效果。
今天我介绍的是通过块传输的方法去实现。
surface.blit(image,(x,y),rect) 在这里surface.blit()这个方法应该大家都很熟悉了,我们就是利用第三个参数,也就是绘制区域的变化实现的动画.我们将图像的一部分绘制出来。如果加上一个简单的循环,让绘制区域的位置发生变化。那么就可以实现动画效果啦。
这个方法实现的精灵动画很简单.
完整代码如下:
import pygame,sys screen = pygame.display.set_mode((600,800)) pygame.display.set_caption('动画测试') image = pygame.image.load('boss.png') rect = image.get_rect() rect2 = pygame.Rect(0,0,rect.width // 4,rect.height) tick = pygame.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() for n in range(4): tick.tick(4) rect2.x += n * rect2.width if rect2.x> 1000: rect2.x = 0 screen.fill((255,255,255)) screen.blit(image,(0,0),rect2)#这里给了3个实参,分别是图像,绘制的位置,绘制的截面框 pygame.display.flip()

其实还有一种方式实现动画,就是surface.subsurface()
《pygame帧动画blit()实现效果》有一个想法