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

通过一系列输入最终让角色完成某个动作,就是指令技。其原理是通过将玩家的键入与指令技列表中的键位进行比对,如果一致,就匹配成功。以下是JavaScript的简单实现:

class Instruct {constructor(callback) {this.instructs = {};    this.MAX_INTERVAL = 250;    //超时时间this.interval = 0;    //上一次输入的时间this.pressedKeys = [];    //记录输入this.callback = callback;window.addEventListener('keydown',this.onKeyDown.bind(this));}//注册指令
    registerinstruct(instructName,instructKeys) {if(this.instructs[instructName]) return false;this.instructs[instructName] = instructKeys;return true;}onKeyDown(e) {let now = +new Date;if(now - this.interval > this.MAX_INTERVAL) this.pressedKeys = [];this.interval = now;//记录指令this.pressedKeys.push(e.keyCode);//检查指令this.checkForinstruct();}checkForinstruct() {let instructFound = '';for(let instructName in this.instructs) {if(this.instructs.hasOwnProperty(instructName)) {//通过比对已记录的指令与设置好的指令来确认是否符合条件if (this.pressedKeys.join(' ').indexOf(this.instructs[instructName].join(' ')) > -1) {instructFound = instructName;break;}}}if(instructFound !== '') {this.pressedKeys = [];this.callback && this.callback.call(this,instructFound);}}removeinstruct(instructName) {if(this.instructs[instructName]) {this.instructs[instructName] = undefined;return true;}return false;}
}

使用方法:

var instruct = new Instruct((matching) => {console.log(matching);
});instruct.registerinstruct('demo',[83,68,83,65,74]);  // ↓ → ↓ ← J

下面是一个实际操作的例子,输入S D S A J(正转半圈、反转半圈+J)来触发:

实现了指令技以后,就能将这个方法用到游戏中,游戏使用U键可以让角色冲刺,另外如果输入→+→也能达到同样的效果。下图即是使用指令达到的效果:

更新日志

  2017/04/09  更新角色跳跃

  2017/04/21  更新角色冲刺

  2017/05/01  更新角色状态机

  2017/05/16  更新角色攻击动画

  2017/05/22  更新角色移动攻击动画

  2017/05/24  更新角色跳跃攻击动画

  2017/06/04  更新地图绘制

  2017/06/22  更新摄像机、长距离冲刺

  2017/07/01  更新指令技

demo

转载于:https://www.cnblogs.com/undefined000/p/detecting-key-and-special-moves-with-javascript.html

HTML5 2D平台游戏开发#8指令技相关推荐

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

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

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

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

  3. Unity 创建2D平台游戏开发学习教程

    了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...

  4. 开发html5 2d 赛车游戏以及打包发布为手机APP 第一话 工欲善其事

    按照昔日做给上头拿去找汽车商卖钱的一个赛车游戏APP的经验来说明这个例子(不过当然只说有关游戏的部分) 思路:一幅赛道画面,赛道上面有一辆主角车,可以由玩家用手指拖拽去控制赛车的移动 设置计时器,画面 ...

  5. 移动开发之我见-移动平台游戏开发技术的前世今生

    随着智能手机平台的兴起,移动平台应用开发变成现在热门的话题,而在应用开发中,游戏的开发占有举足轻重的位置,而移动平台的开发技术,尤其是游戏的开发技术在近几年的变化非常大,从最早门槛低的J2me技术开始 ...

  6. html5 2d,3d游戏引擎

    html5 2d,3d游戏引擎 http://biz.turbulenz.com/developers posted on 2014-10-12 21:58 雨亭 阅读(...) 评论(...) 编辑 ...

  7. 使用Flash Builder 4.5进行多平台游戏开发

    转自:使用Flash Builder 4.5进行多平台游戏开发 目录 设置新项目 配置移动平台 优化技巧和诀窍 提交应用程序 延伸阅读 需求 预备知识 要求拥有使用Flash Builder开发项目的 ...

  8. 2d手机游戏开发_我的手机游戏如何在2周内获得365K应用商店下载(以及为什么我退出独立游戏开发公司…...

    2d手机游戏开发 by William Kwan 关冠伟 我的手机游戏如何在2周内获得365K应用商店下载(以及为什么以后我退出独立游戏开发者) (How My Mobile Game Got 365 ...

  9. 移动平台游戏开发介绍

    2.移动平台游戏开发介绍 转载于:https://www.cnblogs.com/zwj-199306231519/p/9148888.html

  10. 2D动作游戏开发与实现(翻译) .

    本文为 cping1982 主持翻译,如有转载,请严格按照如下方式显示标明译文作者及出处,以示尊重! 译者:cping1982 原文:http://blog.csdn.net/cping1982/ar ...

最新文章

  1. 2.4.2 死锁的处理策略-预防死锁
  2. Scala集合与Java集合的对比
  3. Visio画Visio图
  4. 人类一败涂地显示服务器,人类一败涂地怎么开服务器 | 手游网游页游攻略大全...
  5. Swift - 触摸事件(点击,移动,抬起等)说明及用例
  6. docx文档怎么排列图片_“胶水语言”办公自动化Word篇——使用Python编辑和读取Word文档
  7. Unity3D开发技巧:如何避开unity编辑器的那些坑
  8. 男子拒绝春节带电脑回家工作被开除,最后结果十分舒适...
  9. C# 开发安卓手机应用
  10. 前端微信公众号开发,成功拿到了字节跳动、腾讯大厂offer
  11. 可以在idle内部执行python命令_2、Python IDLE入门
  12. 是时候搞清楚煎饼大妈的真实收入了!来看看专业的研究流程
  13. 第十届蓝桥杯 2019年国赛 最优旅行
  14. 鼠标滑过卡片的上浮效果
  15. 红皮书数据库的学习总结
  16. wrcoef2函数_二维离散小波变换函数使用总结
  17. Redis主从配置详细流程
  18. 网络工程师配置安全设备,防火墙基本配置管理
  19. 【Android】Google Plus---Google Service用于Android APP
  20. 计算机基础课小论文,计算机基础课程论文参考文献大全 哪里有计算机基础课程参考文献...

热门文章

  1. 今晚折腾了好久,win7极限精简版239M在虚拟机未成功?
  2. Spark面试题、答案
  3. 程序员面试总结 (非原创)
  4. 移动应用开发者的阶级状况:多数是无产阶级
  5. 设计模式简介 - Introduction to Design Patterns
  6. 开滦二中2021高考成绩查询,成人成才 无缝严管丨开滦二中西校区2018高考总结交流大会...
  7. 传统蓝牙BR/EDR的搜索Inquiry
  8. 设置 Google Analytics(分析)全局网站统计代码
  9. 【题目】两个整数相除得到循环小数,求循环节
  10. python的encode()和decode()的用法及实例