pygame用blit()实现动画效果
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()实现动画效果相关推荐
- python pygame 动画_pygame用blit()实现动画效果的示例代码
pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...
- 父爱动画代码python_pygame用blit()实现动画效果的示例代码
pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...
- python下雨动画特效_pygame用blit()实现动画效果
pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已. 原理其实很简单,有点像我们做地铁的时候隧道里的广告一样.我们设置 ...
- pygame.surface.blit()方法4个参数的使用方法
pygame.surface.blit方法将一个图像(Surface实例)绘制到另一个图像(Surface实例)上.如screen是一个Surface实例,方法blit具体使用方法如下: rect=s ...
- Python制作酷炫的动画效果
1 引言 利用Python的Matplotlib-Animation库可以制作酷炫的数学公式动画,官方教程可访问链接. 本文为了清晰说明如何利用Animation类来实现动画效果,这里采用介绍一个点沿 ...
- Pygame中blit( )方法讲解(Surface对象)
pygame.surface.blit( )方法旨在将一个图像绘制到另一个图像的上方 其主要格式:blit(source,dest=None,special_flags=0) 将source参数指定的 ...
- Python-pygame 使用subsurface()遍历图片达到动画效果
Python作业贴 网络上很多介绍subsurface()的使用方法, 但毕竟不是自己手动写的,看着难受 遂按照自己的理解重新写一遍 #! /usr/bin/python3# @File: test4 ...
- android 动画x轴旋转,Android Roate3dAnimation实现围绕y轴竖直方向或者绕x轴方向旋转的3d动画效果...
概要: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Roate3dAnim ...
- 【骚气的动效】外发光涟漪波纹动画、向外辐射动画效果,通常用于地图上面某一个扩散点效果
第一种:两轮外发光叠加,第二轮外发光结束后再出现第一轮 /* 外发光动画.向外辐射动画效果 */$orangeColor: rgba(251, 193, 105, 0.6); %out-glow {& ...
最新文章
- c++语言static作用,详解c++中的 static 关键字及作用
- 关于Hibernate中No row with the given identifier exists问题的原因及解决
- MySQL使用Amoeba作为Proxy时的注意事项
- java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计
- websocket在web项目中的使用
- 升级android 6.0系统
- (计算机组成原理)第二章数据的表示和运算-第三节2:IEEE754标准
- 从/etc/inetd.conf学习服务(4)
- 人脸识别(8)----人脸识别主要算法原理
- SPOJ8791 DYNALCA LCT
- 【软件使用技巧】一(截图)
- 【STM32标准库】【自制库】8位8段数码管(74HC595)【软件部分】
- 调试at91-sama5d27遇到的一些问题(3)
- 软件测试基础理论(总结)
- 逆向学习1-[脱壳技术]/篇1
- GE PLC的EGD协议通信
- 走进Visual C++
- sendto recvfrom 详解
- 阿里云服务器安装tomcat
- Linux大全——Linux系统学习资源合集
热门文章
- 线程wait和notify深入学习和分析
- 云时代主机托管的现状和趋势
- Android使用Downloadmanager进行下载时,鉴别取消下载和下载完成的广播
- 关于碰到优盘插入电脑检测到病毒并且优盘里文件只显示System Volume Information文件夹的问题解决。
- 复制链接到剪切板php,剪切复制粘贴
- mac系统用键盘操作菜单栏
- IjkPlayer Option配置不当、导致视频卡顿或没有部分视频无声的坑;
- 三层交换机与单臂路由的优缺点
- html微信气泡插件,微信加上个性化插件工具,瞬间逼格满满
- java fx 内置图标_DOC-05-01 使用内置的布局面板