博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5 2D平台游戏开发#2跳跃与二段跳
阅读量:4599 次
发布时间:2019-06-09

本文共 2185 字,大约阅读时间需要 7 分钟。

  在上一篇《》中已经实现了角色的左右移动,本篇继续实现角色的一系列动作之一:跳跃。先来看看最终效果:

要实现跳跃,必须模拟垂直方向的速度和重力加速度,由于Canvas中坐标系与平时见到的平面坐标系不同,向下为正,向上为负,故定义两个变量:

var vy = -12;    //垂直方向的速度,负代表向上var gravity = 0.5;    //重力加速度

另外,还需要一些变量来标记角色的状态:

var onGround = true,    //标识角色是否在地面上    jumping = false,  //标识角色是否处于跳跃中    keyPressCounter = 0;    //键盘锁,防止连发

跳跃过程的实现可以复习之前写过的一篇文章《》,这里就直接贴出代码:

if (key[32]) { //按下空格跳跃    if (keyPressCounter++===1) {
//防止连发 //只有角色在地面并且处于非跳跃状态时才执行跳跃动作 if (onGround && !jumping) { //更新状态为准备起跳 playerState = 'readyToJump'; jumping = true; //跳跃中 onGround = false; //离地 vy = -12; //跳跃初始速度 } } else {
//此分支表示一直按住跳跃键的情况 //根据角色垂直速度来更新角色所处的状态 if (vy <= 0 && !onGround) { playerState = 'isUp'; //上升中 } else if (vy > 0 && !onGround) {
//下降中 playerState = 'isDown'; } else if (onGround) { //在地面的情况下,如果同时按住跳跃和移动, //将动作设置为move。 if (!key[65] && !key[68]) playerState = 'idle'; else playerState = 'move'; } }} else { //此分支表示没有按下跳跃键时 keyPressCounter = 0; //将连发计数器归零 vy = Math.max(vy, -6); //设置下落速度 jumping = false; //更新标识为非跳跃状态 //根据角色垂直速度来更新角色所处的状态 if (vy <= 0 && !onGround) { playerState = 'isUp'; } else if (vy > 0 && !onGround) { playerState = 'isDown'; }}vy += gravity; //与重力相加来得到最终速度y += vy; //更新yPosition

 

二段跳

  二段跳(Double Jump)是一个游戏术语,顾名思义,就是允许角色在空中进行两次跳跃,中给予了比较明确的定义:a common mechanic in video games which allows the player's character to jump for a second time whilst still in mid air。二段跳可以使角色抵达更高的高度,丰富了游戏的可玩性,而其实现也非常简单。首先需要一个标识表示允许二段跳:

var canDoubleJump = true;

其次,在刚才跳跃的代码中添加如下代码:

if (keyPressCounter++===1) {    if (onGround && !jumping) {        playerState = 'readyToJump';        jumping = true;        onGround = false;        canDoubleJump = true;        vy = -12;    } else {        if (canDoubleJump) {            //二段跳进行后禁止再次跳跃            canDoubleJump = false;            //重新设置起跳速度            vy = -12;        }    }}

最终效果已更新至《》中。

转载于:https://www.cnblogs.com/undefined000/p/how_to_make_character_jump_and_doublejump_in_2d_platform_game.html

你可能感兴趣的文章
MySQL服务使用
查看>>
C语言练手自己编写学生成绩管理系统
查看>>
20175204 张湲祯 2018-2019-2《Java程序设计》第二周学习总结
查看>>
NCPC 2015 - Problem A - Adjoin the Networks
查看>>
How to lisp Lisp output a paragraph"500 Tph Dry Process Cement Plant Machinery Manufacturers"
查看>>
更改chrome浏览器css背景为护眼色,更改字体为微软雅黑。
查看>>
Unix系统编程()文件描述符和打开文件之间的关系
查看>>
ASP.NET AJAX Calling Web Service
查看>>
Connecting Windows Mobile device emulators to the Internet without ActiveSync
查看>>
英文词频统计说明
查看>>
C++的new、delete需要注意的一点:使用危险函数导致的越界
查看>>
js执行过程
查看>>
Laravel5.1学习笔记15 数据库1 数据库使用入门
查看>>
nodejs express搭建一个网站整理
查看>>
POJ 2373 Dividing the Path(DP + 单调队列)
查看>>
(转)3ds Max 和 Away3D工作流程
查看>>
STL: distance, unique
查看>>
[Markdown] 03 进阶语法 第一弹
查看>>
使用HashMap编写一程序实现存储某班级学生信息
查看>>
Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
查看>>