上一章讲述马里奥前进和后退动画以及其他一些动画,本章讲述马里奥跳跃动作和刹车的动作

本章的提交ID:493f38d8628e5beaa23c72ff6c38f76e46fa5b3a

github地址:ainuo5213的超级马里奥

本节目录

本节无新增文件,全部修改之前的文件代码

实现效果

入口文件变动

入口文件去除了鼠标左右键等调试相关的代码,对相机对象的位置做出了变化,当马里奥运动超过100个像素时,改变相机位置,做到相机位置跟随马里奥运动

马里奥运动特征类变动

马里奥运动特征加上了加速、减速等相关属性,dragFactor用来控制马里奥加速的最大值大小,当马里奥在跳跃过程中不能改变马里奥的朝向等 

马里奥跳跃特征类改动

马里奥跳跃特征类改动较多,这里以全代码展示

import { Sides, Trait } from '../Entity.js'export class JumpTrait extends Trait {constructor() {super('jump');// 是否已经做好跳跃的准备了:<0:已经在跳跃过程中;this.ready = 0;// 时长,控制马里奥在空中的时间this.duration = 0.3;// 下降速度this.velocity = 200;// 参与时间this.engageTime = 0;this.requestTime = 0;this.gracePeriod = 0.1;this.speedBoost = 0.3;}get isFalling() {return this.ready < 0;}start = () => {this.requestTime = this.gracePeriod;}cancel = () => {// 结束,设置参与时间为0this.engageTime = 0;this.requestTime = 0;}update = (entity, deltaTime) => {if (this.requestTime > 0) {// ready > 0才可以开始(>0表示马里奥落地了)if (this.ready > 0) {// 开始,设置参与时间为其时长this.engageTime = this.duration;this.requestTime = 0;}this.requestTime -= deltaTime;}// 更新方法,如果还剩余参与时间就还要更新,然后将参与时间减去已经过去的delta时间if (this.engageTime > 0) {entity.vel.y = -(this.velocity + Math.abs(entity.vel.x) * this.speedBoost);this.engageTime -= deltaTime;}this.ready--;}// 马里奥碰到了地面时,调用obstruct = (entity, side) => {// 如果当前达到了地面,就让其等于1,可以再次跳跃if (side === Sides.BOTTOM) {this.ready = 1;}else if (side === Sides.TOP) {this.cancel();}}
}

马里奥实体抽象类Entity改动

马里奥抽象类实体中,对于马里奥特征抽象类加入了一个obstruct方法,用于控制马里奥特征达到某个阈值的时候其子类方法调用

键盘事件处理类变动

加入了上箭头的事件,用来替代空格键跳跃,而空格键用来做加速运动

创建马里奥方法改动

创建马里奥方法,加入了对跳跃动画帧的分支判断,以及对马里奥刹车动作的分支判断,并且加入了一个加速和减速的方法,用来控制马里奥加速和减速

键盘监听文件处理

使用上键代替空格键作为跳跃的键,加入了空格键控制的加速监听

碰撞检测类改动

在y方向发生碰撞时,调用实体的obstruct方法,用来控制马里奥jump特征,实现其落地和跳跃时撞到阻碍物的动作和逻辑

马里奥配置文件改动

马里奥配置文件src/mario.json加入了马里奥跳跃动画帧和刹车动画帧的切片位置配置

原生JS超级马里奥(第八天)相关推荐

  1. 原生JS超级马里奥(第五天)

    上一章讲的是键盘事件监听,实现马里奥的跳跃功能,本章讲述马里奥和大地(砖块)的碰撞检测,代码有点多,原视频长度差不多1个小时20分钟,大家可以看原视频进行理解,边看边敲,我在这里写的代码和注释仅我自己 ...

  2. 原生JS超级马里奥(第三天)

    上一章主要是绘制马里奥和绘制图像代码的部分重构 本章主要是用于时间控制,实现马里奥每次弹跳的定点和弹跳起点一致,对源代码拆分比较多,各位可以跟着原作者视频一起敲 本章的提交ID:90dc4d0a02c ...

  3. 原生JS超级马里奥(第一天)

    这段时间心血来潮,在网上找了一大堆前端关于游戏制作的博客,诸如飞机大战.魂斗罗等,但是个人思维限制,可能想的不是很多.很全面,最终放弃了个人独立开发的打算.皇天不负有心人,最终在youtube上找到了 ...

  4. 原生JS超级马里奥(第四天)

    上一章讲的是马里奥速度改变的事件控制,本章改动较多,例如将马里奥位置改变拆分为一个一个的特征类,还有键盘事件监听,实现马里奥的跳跃功能,各位可以跟着原作者视频一起敲 本章的提交ID:e5caf33c8 ...

  5. 原生JS超级马里奥(第九天)

    上一章讲述马里奥跳跃动作和刹车的动作,本章对Json文件改动较多,我会一一讲解,还涉及到了部分代码重构 本章的提交ID:7419c4a70c772a45795d20ceb6559c1e1e8d8e3a ...

  6. 前端原生js实现图片轮播效果,超级简单,备注详细

    原生js实现简单轮播图,效果如下 纯生js实现轮播图 链接: link. 图片: 我们可以通过左右两边的箭头来播放图片,在我们的鼠标放在图片上时,自动播放结束,转化为手动播放,可以通过小圆点来点击切换 ...

  7. 总结获取原生JS(javascript)的父节点、子节点、兄弟节点

    关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul><li ...

  8. gdiplus判断一个点是否在圆弧线上_面试前必读!!!原生JS补给(上)

    前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 几个月前看过一遍三元大佬的<(建议收藏)原生JS灵魂之问, 请问你能接得住几个?>[¹]系列,当时是利用上下班公交的时间 ...

  9. 星级评价的代码php,JavaScript_使用jQuery实现星级评分代码分享,前面有一篇原生js实现星级评 - phpStudy...

    使用jQuery实现星级评分代码分享 前面有一篇原生js实现星级评分 .可能覆盖面不是很广,现在给出一个jquery实现的星级评分. http://s.thsi.cn/js/jquery-1.7.2. ...

最新文章

  1. easyui datagrid 表格动态隐藏部分列的展示
  2. 构建布局良好的windows程序
  3. 玩点不一样的,如何使用MATLAB实现批量修改文件后缀名,文件名,批量复制文件
  4. VC创建DLL动态链接库及其调用
  5. 目标检测矩形框与polygon数据增加--裁剪,拓展,旋转
  6. windows xp 下使用 windows 2003的远程桌面
  7. Activiti 流程实例、任务、执行对象及相关的表
  8. SAXBuilder的介绍和使用细节
  9. numpy教程:统计函数Statistics
  10. 初学者指南:为开源做贡献
  11. 微信小程序开发系列 (三) :微信小程序如何响应用户点击事件和微信平台 API 的使用方法介绍
  12. Vitis中的各类型文件
  13. C#查看打印机状态(缺纸)
  14. windowsxp下载python下载视频_Python实现视频下载功能
  15. office办公软件 下载与安装教程
  16. BLE_BQB Test_Intermodulation Performance, uncoded data at 1 Ms/s_RF-PHY/RCV/BV-05-C
  17. 微信授权二维码样式修改
  18. 冷战与战后东亚国际秩序:影响及后果
  19. 以下python注释代码中_以下 Python注释代码不正确的是()
  20. Centos7安装远程桌面

热门文章

  1. Oracle Edition-Based Redefinition(EBR)理论与实践
  2. 高并发到底要怎么算才是高并发?
  3. 【聚类学习】时间序列聚类—10年回顾概括性综述
  4. Metrics监控工具介绍与使用
  5. Python连接数据库的类
  6. CA6140车床831003拨叉铣上端面毕业设计(说明书+CAD图纸+工序卡+过程卡)
  7. 办公计算机管理制度,办公计算机使用管理制度.doc
  8. Android 显示系统键盘搜索按键,实现搜索功能
  9. 弘辽科技:淘宝关键词怎么去选词?关键词排名怎么做?
  10. 前程无忧招聘网职位薪酬数据分析