pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已。

原理其实很简单,有点像我们做地铁的时候隧道里的广告一样。我们设置一个窗口。然后让窗口在一个画着很多帧图像的图上面移动,当我们透过这个窗口去观察这幅图的时候,只要窗口沿着一个方向去运动,那么就会产生动画效果。

今天我介绍的是通过块传输的方法去实现。

surface.blit(image,(x,y),rect)  在这里surface.blit()这个方法应该大家都很熟悉了,我们就是利用第三个参数,也就是绘制区域的变化实现的动画.我们将图像的一部分绘制出来。如果加上一个简单的循环,让绘制区域的位置发生变化。那么就可以实现动画效果啦。

这个方法实现的精灵动画很简单.

完整代码如下:

PS:非常抱歉,因为这段代码是几年前我给我孩子写的一个小游戏里的其中一段,我没有测试就直接剪切过来了,后来自己一直也没注意过评论,所以一直没发现这段代码无法正常运行。 现在对代码做了更新,直接复制粘贴就可以运行了,注意在第5行参数那里把图片路径和文件名填写正确。    2020-9-4

import sys,pygamepygame.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 += 1else:n = 0screen.fill((255,255,255))#设置背景为白色screen.blit(image, (0,0),frameRect)#这里给了3个实参,分别是图像,绘制的位置,绘制的截面框fcclock.tick(fps)  #设置图像刷新率,如果刷新率太高,图像闪的太厉害pygame.display.flip() #刷新窗口

其实还有一种方式实现动画,就是surface.subsurface()可以参考我的博客。https://blog.csdn.net/zzwlyj/article/details/82290004#comments

pygame用blit()实现动画效果相关推荐

  1. python pygame 动画_pygame用blit()实现动画效果的示例代码

    pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...

  2. 父爱动画代码python_pygame用blit()实现动画效果的示例代码

    pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...

  3. python下雨动画特效_pygame用blit()实现动画效果

    pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...

  4. pygame.surface.blit()方法4个参数的使用方法

    pygame.surface.blit方法将一个图像(Surface实例)绘制到另一个图像(Surface实例)上.如screen是一个Surface实例,方法blit具体使用方法如下: rect=s ...

  5. Python制作酷炫的动画效果

    1 引言 利用Python的Matplotlib-Animation库可以制作酷炫的数学公式动画,官方教程可访问链接. 本文为了清晰说明如何利用Animation类来实现动画效果,这里采用介绍一个点沿 ...

  6. Pygame中blit( )方法讲解(Surface对象)

    pygame.surface.blit( )方法旨在将一个图像绘制到另一个图像的上方 其主要格式:blit(source,dest=None,special_flags=0) 将source参数指定的 ...

  7. Python-pygame 使用subsurface()遍历图片达到动画效果

    Python作业贴 网络上很多介绍subsurface()的使用方法, 但毕竟不是自己手动写的,看着难受 遂按照自己的理解重新写一遍 #! /usr/bin/python3# @File: test4 ...

  8. android 动画x轴旋转,Android Roate3dAnimation实现围绕y轴竖直方向或者绕x轴方向旋转的3d动画效果...

    概要: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Roate3dAnim ...

  9. 【骚气的动效】外发光涟漪波纹动画、向外辐射动画效果,通常用于地图上面某一个扩散点效果

    第一种:两轮外发光叠加,第二轮外发光结束后再出现第一轮 /* 外发光动画.向外辐射动画效果 */$orangeColor: rgba(251, 193, 105, 0.6); %out-glow {& ...

最新文章

  1. c++语言static作用,详解c++中的 static 关键字及作用
  2. 关于Hibernate中No row with the given identifier exists问题的原因及解决
  3. MySQL使用Amoeba作为Proxy时的注意事项
  4. java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计
  5. websocket在web项目中的使用
  6. 升级android 6.0系统
  7. (计算机组成原理)第二章数据的表示和运算-第三节2:IEEE754标准
  8. 从/etc/inetd.conf学习服务(4)
  9. 人脸识别(8)----人脸识别主要算法原理
  10. SPOJ8791 DYNALCA LCT
  11. 【软件使用技巧】一(截图)
  12. 【STM32标准库】【自制库】8位8段数码管(74HC595)【软件部分】
  13. 调试at91-sama5d27遇到的一些问题(3)
  14. 软件测试基础理论(总结)
  15. 逆向学习1-[脱壳技术]/篇1
  16. GE PLC的EGD协议通信
  17. 走进Visual C++
  18. sendto recvfrom 详解
  19. 阿里云服务器安装tomcat
  20. Linux大全——Linux系统学习资源合集

热门文章

  1. 线程wait和notify深入学习和分析
  2. 云时代主机托管的现状和趋势
  3. Android使用Downloadmanager进行下载时,鉴别取消下载和下载完成的广播
  4. 关于碰到优盘插入电脑检测到病毒并且优盘里文件只显示System Volume Information文件夹的问题解决。
  5. 复制链接到剪切板php,剪切复制粘贴
  6. mac系统用键盘操作菜单栏
  7. IjkPlayer Option配置不当、导致视频卡顿或没有部分视频无声的坑;
  8. 三层交换机与单臂路由的优缺点
  9. html微信气泡插件,微信加上个性化插件工具,瞬间逼格满满
  10. java fx 内置图标_DOC-05-01 使用内置的布局面板