断断续续地把Demo又写了一阵,终于把角色的冲刺动作完成了。冲刺的作用是使角色能够快速移动,闪避攻击或障碍。其完成效果如下:

首先,仍需要一些变量来表示角色的冲刺状态:

//标识角色是否处于冲刺中
var dashing = false; //允许冲刺的时间限制,超过则停止冲刺
var dashLifeTime = 100; //用于防止冲刺键的连发
var keyPressCounter2 = 0;

在角色处于地面的情况下,按下U键可以让角色进行冲刺,松开时角色停止冲刺,若持续按住则角色冲刺动作持续至dashLifeTime耗尽。

另外冲刺中的移动速度变成普通的双倍,同时也可以改变冲刺的方向。

//U键冲刺
if (key[85]) {
if (keyPressCounter2++===1 && onGround) {
dashing = true;
} if (dashLifeTime > 0 && dashing) {
//根据冲刺时间的阶段来更新角色状态
if (dashLifeTime >= 80) playerState = 'readyToDash';
else if (dashLifeTime < 80 && dashLifeTime > 20) playerState = 'dash';
else playerState = 'endDash'; //每次消耗5个单位的冲刺时间
dashLifeTime -= 5;
//两倍移动速度
vx = moveSpeed * 2 * direction;
} else if (dashLifeTime <= 0) {//到达时间限制冲刺结束,更新标记与角色状态
dashing = false;
dashLifeTime = 100;
playerState = 'idle';
vx = 0;
}
}
//松开U键
else {
keyPressCounter2 = 0;
dashing = false;
dashLifeTime = 100;
}

以上便是控制角色冲刺的主要代码,不过这还不是难点。如果在操作中同时按下了多个按键,是它们都起作用还是其中一个按键起作用,这是一个要考虑的问题,也就是状态机。为方便起见,以下代码只粗略地列出了几种可能的情况(在冲刺键被按下的条件下):

if (key[85]) {
//省略部分代码
//按下跳跃原地起跳
if (key[32] || key[75]) {
vx = 0;
}
//若按下跳跃键的同时还按下了方向键
if ((key[32] || key[75]) && (key[65] || key[68])) {
playerState = 'move';
if (vy <= 0 && !onGround) {
playerState = 'isUp';
} else if (vy > 0 && !onGround) {
playerState = 'isDown';
}
vx = moveSpeed * direction;
}
if (key[65] || key[68]) {
if (onGround && !dashing) {
vx = moveSpeed * direction;
playerState = 'move';
} else if (dashing) {
vx = moveSpeed * 2 * direction;
} } if ((key[65] || key[68]) && !onGround && jumping) {
if (lastKey !== 85 && lastKey !== 65 && lastKey !== 68) {
if (dashing) vx = moveSpeed * 2 * direction;
else vx = moveSpeed * direction;
}
}
}

最终效果已更新至 《Canvas制作时间与行为可控的sprite动画》。

HTML5 2D平台游戏开发#3冲刺的更多相关文章

  1. HTML5 2D平台游戏开发#4状态机

    在实现了<HTML5 2D平台游戏开发——角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...

  2. HTML5 2D平台游戏开发#6地图绘制

    此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...

  3. HTML5 2D平台游戏开发#11斜坡物理

    在游戏中会经常遇到斜坡地形,比如众所周知的魂斗罗,角色可以在坡上移动和跳跃: 斜坡在2D游戏中很常见,处理起来也较为棘手.最初我打算用分离轴定律来实现,在建立了一个物理模型之后: 发现上坡时没什么问题 ...

  4. HTML5 2D平台游戏开发#8指令技

    一般在动作游戏中,玩家可以通过对输入设备输入一系列的指令让角色完成某个或多个特定的动作.以格斗游戏<拳皇>为例,键入↓↘→↘↓↙← + A or C可以触发IORI的必杀技八稚女: 通过一 ...

  5. HTML5 2D平台游戏开发#7Camera

    在庞大的游戏世界中,玩家不能一览地图全貌,而是只能看到其中一部分,并一步步探索,这时就要用到一种技术来显示局部的地图,游戏术语称为摄像机(Camera).下面两张图中的白色矩形框表示了Camera的作 ...

  6. HTML5 2D平台游戏开发#5攻击

    目前为止,角色除了基本的移动外还什么都不能做,于是我打算先实现角色的攻击动画.角色的普通攻击一共可以分为三个阶段: 一段斩 二段斩 三段斩 移动攻击 跳跃攻击 触发方式为角色站立时按下J(攻击)键,角 ...

  7. HTML5 2D平台游戏开发#9蓄力技

    在很多动作游戏中,玩家操控的角色可以施放出比普通攻击更强力的蓄力技,一般操作为按住攻击键一段时间然后松开,具体效果像下面这张图: 要实现这个操作首先要记录下按键被按住的时间,初始是0: this.sa ...

  8. HTML5 2D平台游戏开发#1

    在Web领域通常会用到一组sprite来展示动画,这类动画从开始到结束往往不会有用户参与,即用户很少会用控制器(例如鼠标.键盘.手柄.操作杆等输入设备)进行操作.但在游戏领域,sprite动画与控制器 ...

  9. HTML5 2D平台游戏开发#10Wall Jump

    这个术语不知道怎么翻译比较贴切,但并不妨碍对字面意思的理解,大概就是飞檐走壁.比如: 这是游戏<忍者龙剑传>中的场景,玩家可以通过操纵角色在墙面上移动并跳跃. 首先需要实现角色抓墙这一动作 ...

随机推荐

  1. FFT与NTT

    讲解:http://www.cnblogs.com/poorpool/p/8760748.html 递归版FFT #include <iostream> #include <cstd ...

  2. 【CF1073D】Berland Fair(模拟)

    题意:初始有t元,每次从1开始买,从1到n依次有n个人,每个人的东西价格为a[i],该人依次能买就买,到n之后再回到1从头开始,问最后能买到的东西数量 n<=2e5,t<=1e18,a[i ...

  3. 【CF1073A】Diverse Substring(签到)

    题意:给定一个由小写字母组成的串,要求找出一个子串使得其中出现最多的字母不超过它长度的一半下取整 n<=1e3 思路: #include<cstdio> #include<cs ...

  4. BZOJ【1607】轻拍牛头

    1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1245  Solved: ...

  5. TCP/IP协议详解笔记——IP协议

    简介 TCP/IP协议族中最核心的协议,提供不可靠.无连接的数据报传输服务. 不可靠:不能保证IP数据报能成功送达. 无连接:并不维护后续数据报的状态信息,每个数据报的处理都是相互独立.数据报可能不会 ...

  6. Linux STP介绍

    1. 介绍 STP(Spanning Tree Protocol)即生成树协议,标准为IEEE802.1D-1998STP是一种二层冗余技术,利用STA算法构建一个逻辑上没有环路的树形网络拓扑结构,并 ...

  7. manjao linux下玩转arduino

    自从入手arduinon差不多半个月了,在window下几乎没有任何问题,下载,编程,编译,上传,运行.几乎没有任何问题.在linux编译成功,上传时下却总是提示找不到libncurses.so.5无 ...

  8. Scrapy笔记:日志的使用

    scrapy的日志记录有两种方式: spider.logger.xx()和python标准库中的logger = logging.get_Logger('log information') 向日志对象 ...

  9. win7下用PyInstaller把Python代码打包成exe文件

    2013-11-05 22:02:14|   1.安装 使用PyInstaller需要安装PyWin32. 下载与Python对应的PyInstaller版本,解压后就算安装好了. 例如,安装了PyI ...

  10. 浅谈.Net异步编程的前世今生----EAP篇

    前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...