原生JS超级马里奥(第八天)
上一章讲述马里奥前进和后退动画以及其他一些动画,本章讲述马里奥跳跃动作和刹车的动作
本章的提交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超级马里奥(第八天)相关推荐
- 原生JS超级马里奥(第五天)
上一章讲的是键盘事件监听,实现马里奥的跳跃功能,本章讲述马里奥和大地(砖块)的碰撞检测,代码有点多,原视频长度差不多1个小时20分钟,大家可以看原视频进行理解,边看边敲,我在这里写的代码和注释仅我自己 ...
- 原生JS超级马里奥(第三天)
上一章主要是绘制马里奥和绘制图像代码的部分重构 本章主要是用于时间控制,实现马里奥每次弹跳的定点和弹跳起点一致,对源代码拆分比较多,各位可以跟着原作者视频一起敲 本章的提交ID:90dc4d0a02c ...
- 原生JS超级马里奥(第一天)
这段时间心血来潮,在网上找了一大堆前端关于游戏制作的博客,诸如飞机大战.魂斗罗等,但是个人思维限制,可能想的不是很多.很全面,最终放弃了个人独立开发的打算.皇天不负有心人,最终在youtube上找到了 ...
- 原生JS超级马里奥(第四天)
上一章讲的是马里奥速度改变的事件控制,本章改动较多,例如将马里奥位置改变拆分为一个一个的特征类,还有键盘事件监听,实现马里奥的跳跃功能,各位可以跟着原作者视频一起敲 本章的提交ID:e5caf33c8 ...
- 原生JS超级马里奥(第九天)
上一章讲述马里奥跳跃动作和刹车的动作,本章对Json文件改动较多,我会一一讲解,还涉及到了部分代码重构 本章的提交ID:7419c4a70c772a45795d20ceb6559c1e1e8d8e3a ...
- 前端原生js实现图片轮播效果,超级简单,备注详细
原生js实现简单轮播图,效果如下 纯生js实现轮播图 链接: link. 图片: 我们可以通过左右两边的箭头来播放图片,在我们的鼠标放在图片上时,自动播放结束,转化为手动播放,可以通过小圆点来点击切换 ...
- 总结获取原生JS(javascript)的父节点、子节点、兄弟节点
关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul><li ...
- gdiplus判断一个点是否在圆弧线上_面试前必读!!!原生JS补给(上)
前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 几个月前看过一遍三元大佬的<(建议收藏)原生JS灵魂之问, 请问你能接得住几个?>[¹]系列,当时是利用上下班公交的时间 ...
- 星级评价的代码php,JavaScript_使用jQuery实现星级评分代码分享,前面有一篇原生js实现星级评 - phpStudy...
使用jQuery实现星级评分代码分享 前面有一篇原生js实现星级评分 .可能覆盖面不是很广,现在给出一个jquery实现的星级评分. http://s.thsi.cn/js/jquery-1.7.2. ...
最新文章
- easyui datagrid 表格动态隐藏部分列的展示
- 构建布局良好的windows程序
- 玩点不一样的,如何使用MATLAB实现批量修改文件后缀名,文件名,批量复制文件
- VC创建DLL动态链接库及其调用
- 目标检测矩形框与polygon数据增加--裁剪,拓展,旋转
- windows xp 下使用 windows 2003的远程桌面
- Activiti 流程实例、任务、执行对象及相关的表
- SAXBuilder的介绍和使用细节
- numpy教程:统计函数Statistics
- 初学者指南:为开源做贡献
- 微信小程序开发系列 (三) :微信小程序如何响应用户点击事件和微信平台 API 的使用方法介绍
- Vitis中的各类型文件
- C#查看打印机状态(缺纸)
- windowsxp下载python下载视频_Python实现视频下载功能
- office办公软件 下载与安装教程
- BLE_BQB Test_Intermodulation Performance, uncoded data at 1 Ms/s_RF-PHY/RCV/BV-05-C
- 微信授权二维码样式修改
- 冷战与战后东亚国际秩序:影响及后果
- 以下python注释代码中_以下 Python注释代码不正确的是()
- Centos7安装远程桌面