RpgMakerMV源码解析(1)-输入管理
来源:互联网 发布:育知同创韩茹java 编辑:程序博客网 时间:2024/06/07 19:02
输入管理
在几乎所有的游戏框架中都有输入管理器的存在,作用就是将系统底层的按键事件收集起来,然后对外提供一个简单的按键状态访问。
我们接下来就看看在rpgmakerMV中的输入管理实现。
rpgmakerMV可以获取键盘输入,手柄输入,以及触屏输入,分别实现在两个类Input,touchInput里,两者大同小异,我们这里主要看一看Input的实现,只要理解了基本概念,分析touchInput也是很简单的事情。
我们之前说了,输入管理器首先要从一个底层的数据源收集按键状态,在MV中这个数据源是浏览器,当然浏览器最后还是会调用到操作系统的API。
可以看到,在初始化中就对浏览器的键盘事件添加了监听。
我们看看事件处理
具体的状态设置是在最后一句。
有人可能疑惑这种状态收集的作用是什么,主要原因就是底层的事件是瞬时且不稳定的,而状态是持续的,如果你直接根据浏览器的按键事件来进行输入处理,对一个游戏来说是不合适的,比如我们可能需要按下右键持续向右移动,但是因为浏览器的按键事件触发频率并不是固定的,实际上会出现移动时快时慢的现象,但是我们这边将状态存储起来,就可以避免这种情况。
rmmv这里状态设计的比较简单,只有弹起和按下状态,分别在onKeyDown和onKeyUp里面设置,我们之后会单独写一篇输入管理谈一下如何为游戏框架设计一个强大的输入管理器。
按键映射,按键映射是输入管理一个常见的功能,提供按键名到实际keyCode的映射,这样我们可以为某个按键取一个别名,在检测的时候只要检测该别名就可以,代码看上去可读性更高,还可以把多个按键映射到一个别名上。
比如 if(Input.isKeyDown(“shoot”)){//do sth}
映射的实际逻辑如下,就是一个很简单的查表的过程。
作为一个输入管理器最重要的功能就是查询按键状态
rmmv提供的查询也比较简单
Input.isPressed 是否处在按下状态
Input.isTriggered 是否刚刚按下
Input.isRepeated 是否重复按下
Input.isLongPressed 是否长按
不过rmmv作为一个rpg游戏专用型的框架,输入管理也比通用的输入管理器更进了一层,他在update中直接将按键映射到移动方向
可以从我的github仓库获取我做的详细中文注释版的rpgmakermv源码进行学习,目前还在更新中
https://github.com/luckyCatMiao/rpgmakermv-library-ChineseAnnotations
- RpgMakerMV源码解析(1)-输入管理
- 基于RPGMakerMV的JavaScript基础-1
- mongodb 源码解析内存管理
- leveldb源码解析1——内存管理类Arena
- HDFS客户端 输入流源码解析
- androd输入管理系统机制解析
- androd输入管理系统机制解析
- Cassandra 源码解析 4: GMS 集群管理
- RabbitMQ源码解析前奏--管理与监控
- Tomcat源码解析(四):session管理
- Redis源码解析——内存管理
- RPGMakerMV的插件学习
- Android输入管理服务启动过程源码分析
- android输入法02:openwnn源码解析01—输入流程
- MapReduce源码分析之MapReduce如何读取、解析输入文件
- 【Android源码解析】 自定义可清除的输入框
- MapReduce数据输入中InputFormat类源码解析
- caffe1源码解析从入门到放弃1):内存管理syncedmem.hpp / syncedmem.cpp
- EasyDSS高性能流媒体服务器前端重构(六)- webpack-dev-server 支持手机端访问
- 字符串匹配问题解决方案之一KMP算法
- 图片标注工具LabelImg使用教程
- register_chrdev & unregister_chrdev
- HTML
- RpgMakerMV源码解析(1)-输入管理
- 谷歌搜索技巧
- 排序算法的Java实现+思路(一):冒泡、快排
- (HDU
- pip安装python包时报字符编码错
- 关于scipy包的安装
- 第十二篇博客
- Trafodion 使用gdb分析core文件
- 判断触摸点 cocos2d-js