pygame-KidsCanCode系列jumpy-part10-角色动画(上)
上一节学习如何利用spritesheet加载图片,但是player仍然是一张静态的图片,比较枯燥,我们要让它动起来!
Player类,先把各种状态的图片加载起来:
1 # 加载各种状态的图片序列 2 def load_images(self): 3 # 站立状态的图片 4 self.standing_frames = [self.game.spritesheet.get_image("bunny1_ready.png"), 5 self.game.spritesheet.get_image("bunny1_stand.png")] 6 7 # 向右走的图片 8 self.walking_frames_right = [self.game.spritesheet.get_image("bunny1_walk1.png"), 9 self.game.spritesheet.get_image("bunny1_walk2.png")] 10 11 # 向左走的图片 12 self.walking_frames_left = [] 13 for frame in self.walking_frames_right: 14 # 向左走的图片,只需要把向"右"走的图片,水平(x)方向翻转即可 15 self.walking_frames_left.append(pg.transform.flip(frame, True, False)) 16 17 # 跳跃状态的图片 18 self.jump_frame = self.game.spritesheet.get_image("bunny1_jump.png")
View Code
然后要有一些bool型的状态变化(不然,我们就无法知道当前角色是在jump,还是在walk,或是stand)
1 class Player(pg.sprite.Sprite): 2 3 def __init__(self, game): 4 pg.sprite.Sprite.__init__(self) 5 self.game = game 6 # 是否在行走状态 7 self.walking = False 8 # 是否处于跳跃状态 9 self.jumping = False 10 # 当前状态的动画,显示的是哪一"帧" 11 self.current_frame = 0 12 # 当前状态的动画,最后一次切换是什么时候? 13 self.last_update = 0 14 # 加载图片 15 self.load_images() 16 # 初始状态为"站立" 17 self.image = self.standing_frames[0] 18 19 ...
View Code
注:current_frame变量的作用,解释一下,一个状态下的图片可能有多张,需要知道当前切换到了第几张,这个变量保存的就是第几张图片的N值。另外一个变量last_update后面会讲到,这里先不用管。
当player向上跳起时,要切换jump的状态:
1 def jump(self): 2 hits = pg.sprite.spritecollide(self, self.game.platforms, False) 3 if hits: 4 self.vel.y = -PLAYER_JUMP 5 # 修改跳跃状态 6 self.jumping = True
View Code
为了方便统一处理角色的动画效果,在Player类中新增一个animation函数:
# 动画处理def animate(self):now = pg.time.get_ticks()# 更新walking状态if self.vel.x != 0:self.walking = Trueelse:self.walking = False# 垂直方向速度为0,认为未跳跃if abs(self.vel.y) < 0.5:self.jumping = False# 切换jumping图片if self.jumping:self.image = self.jump_frameelse:self.image = self.standing_frames[0]if not self.jumping and not self.walking:# 调节这里的200,可以控制动画的播放速度if now - self.last_update > 200:self.last_update = nowself.current_frame += 1# bunny1_ready.png与bunny1_stand.png的高度不同,所以切换后,要调整bottom值,保证图片的最下边缘正好站在档板上old_bottom = self.rect.bottomself.image = self.standing_frames[self.current_frame % len(self.standing_frames)]self.rect = self.image.get_rect()self.rect.bottom = old_bottom
View Code
last_update变量的作用,在animation中就体现出来了,这个变量结合当前时间,算出差值,可以控制每隔多少毫秒切换1次图片。相当于,控制角色动画的播放速度。
最后在update函数中,调用animation:
def update(self):# 动画处理 self.animate()self.acc = vec(0, PLAYER_GRAVITY)keys = pg.key.get_pressed()if keys[pg.K_LEFT]:self.acc.x = -PLAYER_ACCif keys[pg.K_RIGHT]:self.acc.x = PLAYER_ACCself.acc.x += self.vel.x * PLAYER_FRICTIONself.vel += self.accself.pos += self.vel# 因为walking状态的切换,依赖于x速度是否为0判断,当x在0左右的极小值摆动时,会导致判断出错if abs(self.vel.x) < 0.5:self.vel.x = 0...
View Code
转载于:https://www.cnblogs.com/yjmyzz/p/pygame-kidscancode-part10-animation-1.html
pygame-KidsCanCode系列jumpy-part10-角色动画(上)相关推荐
- Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(上) 物理引擎先放一边 动画库ozz-animation 动画资源管理 载入和预处理动画 合并到OSG显示 物理引擎先放一边 ...
- Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(下) 角色动作的过渡切换 角色动画高级技巧 构建测试场景并运行 数据驱动的角色运动 角色动作的过渡切换 我们在研究下一步的高级 ...
- 三维游戏中的角色动画
为体现游戏的真实性.艺术性,动画效果一般都是由专门的动画师利用特定的软件提前制作完成,在游戏运行阶段,由游戏引擎对这些动画按照游戏的逻辑.用户输入等条件进行控制,有效地播放出来.当然,也有一些动画效果 ...
- DAZ Studio专业三维角色动画制作软件V4.9.4完美注册激活版 支持Win/Mac
本软件是由Adobe机构出品的DAZ Studio专业三维角色动画制作软件V4.9.4完美注册激活版,大小:1 GB,支持Win与Mac系统,语言:英语. DAZ Studio是DAZ3d公司出品的一 ...
- D3D角色动画学习笔记(一)——角色动画简介与初步规划
D3D角色动画学习笔记(一)--角色动画简介与初步规划 写这个系列是基于自己学习角色动画之后,相对自己的成果做一个整理,还可以给大家做一个角色动画的预览,可能会节省大家的一点时间,同时也希望各位大神能 ...
- 《强化学习周刊》第39期:近似最优深度、多智能体广义、角色动画强化学习...
No.39 智源社区 强化学习组 强 化 学 习 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<强化学习周刊>已经开启"订阅功能",以后我们会向您自动推送最 ...
- iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC
这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...
- ASP.NET企业开发框架IsLine FrameWork系列之四--DataProvider 数据访问(上)
ASP.NET企业开发框架IsLine FrameWork系列之四--DataProvider 数据访问(上) 接上文 DataProvider是日常编程中最常用的Provider,它为项目提供了与数 ...
- Adobe Illustrator的教程:如何建立扁平化设计角色动画
即使你不能也借鉴,您可以创建一个简单的步骤人物. 学习设计特点,并按照在这个video.flash角色设计/动画CC角色设计中使用的设计过程中的任何字符". Adobe Illustrato ...
最新文章
- Ubuntu 16.04安装Zabbix 3.2 版本
- 阿里云 OSS+CDN
- 北航计算机学院编译原理,1 北航本科编译原理课件课本 张莉.pdf
- 进阶学习(3.12) Operand Pattern 装饰器模式
- python matplotlib pyplot title_Matplotlib pyplot.title(字符串)返回
- Clustered Data ONTAP Fundamentals课程第一单元学习笔记(续3)
- 用户偏好类结构化数据分析题参赛总结
- 深入理解 C# 协变和逆变
- idea mac 替换_Mac软件IntelliJ IDEA 上的快捷键,让你的工作更加顺畅
- 6、oracle数据库下查询操作
- hive中groupby优化_Hive数据倾斜
- oracle中dual最多存多大_ORACLE中dual用法详解
- linux内核之进程调度
- weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件
- win7需要计算机管理员权限,解决方案:Win7安装软件需要管理员权限解决方案
- PS与qq热键设置雷同
- python制作四川话并生成证书,可打包为exe
- 全网首发Modown主题8.31开心版
- 百慕大永中科技来华创业蒙难记
- STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)
热门文章
- TOMCAT服务器概述
- linux7怎么查看rsync状态,linux – Rsync显示单个文件的进度
- php 打开报错,php模式下 运行start.php 报错
- open_basedir php.ini,关于PHP文件包含目录配置 open_basedir
- react mysql增删改查_react增删改查
- 企业网站推广如何利用SEO获取精准流量?
- php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos
- js 删除对象某个属性_JS里的数据类型
- access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
- (转载)IP,主机名,域名