上节继续,上节并没有处理向左走、向右走的动画效果,这节补上,看似很简单,但是有一些细节还是要注意:

    def jump(self):
hits = pg.sprite.spritecollide(self, self.game.platforms, False)
if hits:
self.vel.y = -PLAYER_JUMP
# 水平方向未走动时,才认为是向上跳跃状态
# (否则,如果向上跳时,同时按左右方向键,不会切换到向左或向右的转向动画)
if abs(self.vel.x) < 0.5:
self.jumping = True

首先,因为向左、向右走时,视觉上要能体现出转身的效果,所以在切换jumping状态时,就要考虑到这一点,另外由于我们之前加入了摩擦力,不管是x,还是y方向,减速的递减到最后趋于静止的阶段,都是不断靠近0(如果没有特殊处理的话,会在0左右的极小值摆动),因为判断速度是否为0,最好是abs取绝对值,然后跟一个较小的值,比如0.5比较,这样比较靠谱。

类似的,在animation函数中,也会考虑到这些细节,参考下面的代码:

     def animate(self):
now = pg.time.get_ticks() if self.vel.x != 0:
self.walking = True
else:
self.walking = False # 如果垂直方向静止,或水平方向有走动时,认为向上跳跃状态结束
if abs(self.vel.y) < 0.5 or abs(self.vel.x) > 0.5:
self.jumping = False if self.jumping:
self.image = self.jump_frame
# 下面的不再需要了,否则左右走动时,会变成站立状态
# else:
# self.image = self.standing_frames[0] # 水平向左/向右走的动画处理
if self.walking:
if now - self.last_update > 150:
self.last_update = now
self.current_frame += 1
bottom = self.rect.bottom
# 向左
if self.vel.x < 0:
self.image = self.walking_frames_left[self.current_frame % len(self.walking_frames_left)]
elif self.vel.x > 0:
# 向右
self.image = self.walking_frames_right[self.current_frame % len(self.walking_frames_right)]
self.rect = self.image.get_rect()
self.rect.bottom = bottom if not self.jumping and not self.walking:
if now - self.last_update > 200:
self.last_update = now
self.current_frame += 1
bottom = self.rect.bottom
self.image = self.standing_frames[self.current_frame % len(self.standing_frames)]
self.rect = self.image.get_rect()
self.rect.bottom = bottom

最终效果:

pygame-KidsCanCode系列jumpy-part11-角色动画(下)的更多相关文章

  1. pygame 笔记-3 角色动画及背景的使用

    上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...

  2. 【Salvation】——怪物角色动画&主角碰撞死亡动画

    写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复. 一.设计敌人 拖一个精英sprite到层次面板 ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  5. OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现

    # OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...

  6. OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

    # OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...

  7. RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理

    上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...

  8. 【iOS系列】-自定义Modar动画

    [iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...

  9. 【MM系列】SAP 物料帐下修改物料的价格

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 物料帐下修改物料的价格   ...

随机推荐

  1. bat批处理文件 批量修改文件名

    需要将一系列文件如out-M0.png, out-M1.png, out-M2.png, ... 重新命名为 color-0.png, color-1.png, color-2.png, ... 方法 ...

  2. adb devices unauthorized解决办法

    进行Android项目调试时,连接完设备,进行adb install ******.apk时,偶遇 adb devices unauthorized 这个小东西,解决办法:将手机设置->辅助功能 ...

  3. 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业

    题解: 比较容易想到二分答案+时间逆流 这样就变成了经典的路灯问题 f[a][b][0/1] 其实可以不用二分答案 根据倒着考虑我们会发现一定是先走旁边的再走中间的 计算到当前点+下课时间所需的最小时 ...

  4. jenkins X实践系列(4) —— jenkins X 构建提速

    jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中.最近调研了JX,这里为第4篇,介绍如何加入jx构建和部署. builder镜像下载慢 先在一台机器上下载好,然后放到本地仓 ...

  5. Netty断线重连

    Netty断线重连 最近使用Netty开发一个中转服务,需要一直保持与Server端的连接,网络中断后需要可以自动重连,查询官网资料,实现方案很简单,核心思想是在channelUnregistered ...

  6. bash: cannot create temp file for here-document: Read-only file system

    文件系统被强制只读问题,第一眼看到百度了一下,说可能磁盘坏了.卧槽我都吓懵了系统盘坏了,闹着玩呢,然后接着查资料,排查 mount 查看所有挂载,发现根目录的挂载权限是ro只读. /dev/sda2 ...

  7. Codeforces 965E Short Code 启发式合并 (看题解)

    Short Code 我的想法是建出字典树, 然后让后面节点最多的点优先向上移到不能移为止, 然后gg. 正确做法是对于当前的节点如果没有被占, 那么从它的子树中选出一个深度最大的点换到当前位置. 用 ...

  8. Spring(三)实例化Bean以及注入对象

    使用xml实例化bean 在xml中实例化bean的三种方式 <bean id="springService" class="com.zhiyou100.crm.t ...

  9. POJ 3264 Balanced Lineup(模板题)【RMQ】

    <题目链接> 题目大意: 给定一段序列,进行q次询问,输出每次询问区间的最大值与最小值之差. 解题分析: RMQ模板题,用ST表求解,ST表用了倍增的原理. #include <cs ...

  10. UML图快速入门

    UML(Unified Modeling Language)统一建模语言的概念已经出现了近20年,虽然并不是所有的概念都非常有实践意义,但常见的用例图.类图.序列图和状态图却实实在在非常有效,是项目中 ...