pygame-KidsCanCode系列jumpy-part11-角色动画(下)
接上节继续,上节并没有处理向左走、向右走的动画效果,这节补上,看似很简单,但是有一些细节还是要注意:
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-角色动画(下)的更多相关文章
- pygame 笔记-3 角色动画及背景的使用
上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...
- 【Salvation】——怪物角色动画&主角碰撞死亡动画
写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复. 一.设计敌人 拖一个精英sprite到层次面板 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
- RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...
- 【iOS系列】-自定义Modar动画
[iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...
- 【MM系列】SAP 物料帐下修改物料的价格
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 物料帐下修改物料的价格 ...
随机推荐
- C# 之设计原则
代码也需要有秩序,就像世界需要秩序,基于SOLID architecture principles. 一.SOLID原则 S.O.L.I.D.是一组面对面向对象设计的最佳实践的设计原则.术语来自Rob ...
- mongo 分片
// use ebay // sh.enableSharding("ebay") // db.getCollection("ebay_total_menu_detail_ ...
- Flink--time-window 的高级用法
1.现实世界中的时间是不一致的,在 flink 中被划分为事件时间,提取时间,处理时间三种. 2.如果以 EventTime 为基准来定义时间窗口那将形成 EventTimeWindow,要求消息本身 ...
- Codeforces 965E Short Code 启发式合并 (看题解)
Short Code 我的想法是建出字典树, 然后让后面节点最多的点优先向上移到不能移为止, 然后gg. 正确做法是对于当前的节点如果没有被占, 那么从它的子树中选出一个深度最大的点换到当前位置. 用 ...
- AtCoder Regular Contest 080 (ARC080) E - Young Maids 线段树 堆
原文链接http://www.cnblogs.com/zhouzhendong/p/8934377.html 题目传送门 - ARC080 E - Young Maids 题意 给定一个长度为$n$的 ...
- POJ3041 Asteroids 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8229200.html 题目传送门 - POJ3041 题意概括 有一个n*n的矩阵,有些点是障碍物. 现在每次可 ...
- 洛谷3825 [NOI2017]游戏 2-sat
原文链接http://www.cnblogs.com/zhouzhendong/p/8146041.html 题目传送门 - 洛谷3825 题解 我们考虑到地图中x的个数很少,最多只有8个. 所以我们 ...
- 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff] ...
- Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中
Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...
- numpy学习笔记.
import numpy as np import cv2 import matplotlib.pyplot as plt 一.数组的创建 1. 创建二维数组 np.array([ [1,2,3], ...