上一节学习如何利用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-角色动画(上)相关推荐

  1. Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)

    [Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(上) 物理引擎先放一边 动画库ozz-animation 动画资源管理 载入和预处理动画 合并到OSG显示 物理引擎先放一边 ...

  2. Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)

    [Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(下) 角色动作的过渡切换 角色动画高级技巧 构建测试场景并运行 数据驱动的角色运动 角色动作的过渡切换 我们在研究下一步的高级 ...

  3. 三维游戏中的角色动画

    为体现游戏的真实性.艺术性,动画效果一般都是由专门的动画师利用特定的软件提前制作完成,在游戏运行阶段,由游戏引擎对这些动画按照游戏的逻辑.用户输入等条件进行控制,有效地播放出来.当然,也有一些动画效果 ...

  4. DAZ Studio专业三维角色动画制作软件V4.9.4完美注册激活版 支持Win/Mac

    本软件是由Adobe机构出品的DAZ Studio专业三维角色动画制作软件V4.9.4完美注册激活版,大小:1 GB,支持Win与Mac系统,语言:英语. DAZ Studio是DAZ3d公司出品的一 ...

  5. D3D角色动画学习笔记(一)——角色动画简介与初步规划

    D3D角色动画学习笔记(一)--角色动画简介与初步规划 写这个系列是基于自己学习角色动画之后,相对自己的成果做一个整理,还可以给大家做一个角色动画的预览,可能会节省大家的一点时间,同时也希望各位大神能 ...

  6. 《强化学习周刊》第39期:近似最优深度、多智能体广义、角色动画强化学习...

    No.39 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<强化学习周刊>已经开启"订阅功能",以后我们会向您自动推送最 ...

  7. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  8. ASP.NET企业开发框架IsLine FrameWork系列之四--DataProvider 数据访问(上)

    ASP.NET企业开发框架IsLine FrameWork系列之四--DataProvider 数据访问(上) 接上文 DataProvider是日常编程中最常用的Provider,它为项目提供了与数 ...

  9. Adobe Illustrator的教程:如何建立扁平化设计角色动画

    即使你不能也借鉴,您可以创建一个简单的步骤人物. 学习设计特点,并按照在这个video.flash角色设计/动画CC角色设计中使用的设计过程中的任何字符". Adobe Illustrato ...

最新文章

  1. Ubuntu 16.04安装Zabbix 3.2 版本
  2. 阿里云 OSS+CDN
  3. 北航计算机学院编译原理,1 北航本科编译原理课件课本 张莉.pdf
  4. 进阶学习(3.12) Operand Pattern 装饰器模式
  5. python matplotlib pyplot title_Matplotlib pyplot.title(字符串)返回
  6. Clustered Data ONTAP Fundamentals课程第一单元学习笔记(续3)
  7. 用户偏好类结构化数据分析题参赛总结
  8. 深入理解 C# 协变和逆变
  9. idea mac 替换_Mac软件IntelliJ IDEA 上的快捷键,让你的工作更加顺畅
  10. 6、oracle数据库下查询操作
  11. hive中groupby优化_Hive数据倾斜
  12. oracle中dual最多存多大_ORACLE中dual用法详解
  13. linux内核之进程调度
  14. weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件
  15. win7需要计算机管理员权限,解决方案:Win7安装软件需要管理员权限解决方案
  16. PS与qq热键设置雷同
  17. python制作四川话并生成证书,可打包为exe
  18. 全网首发Modown主题8.31开心版
  19. 百慕大永中科技来华创业蒙难记
  20. STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)

热门文章

  1. TOMCAT服务器概述
  2. linux7怎么查看rsync状态,linux – Rsync显示单个文件的进度
  3. php 打开报错,php模式下 运行start.php 报错
  4. open_basedir php.ini,关于PHP文件包含目录配置 open_basedir
  5. react mysql增删改查_react增删改查
  6. 企业网站推广如何利用SEO获取精准流量?
  7. php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos
  8. js 删除对象某个属性_JS里的数据类型
  9. access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
  10. (转载)IP,主机名,域名