RpgMakerMV源码解析(1)-输入管理

输入管理

在几乎所有的游戏框架中都有输入管理器的存在,作用就是将系统底层的按键事件收集起来,然后对外提供一个简单的按键状态访问。
我们接下来就看看在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

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【实例教程1】怎样编写一个插件? 1. 插件的注释与定义参数 2. 读取插件参数 3. 插件指令的实现 【实例教程2】制作一个启动画面 1. 从哪里开始? 2. 创建启动画面的场景类 【实例教程3】玩转菜单初级篇 1. 给各个菜单界面添加背景 2. 让背景滚动起来 3. 在主菜单界面增加自定义菜单:改名 4. 在主菜单界面移除菜单命令 5. 在主菜单界面增加一个自定义窗口 【实例教程4】玩转标题画面 1. 美化游戏标题 2. 让背景动起来 3. 自定义标题菜单 4. 美化菜单 【实例教程5】制作小游戏:坦克大战(上) 1. 游戏结构及流程介绍 2. 相关素材资源的下载和使用 3. 基础知识:音效的播放 4. 基础知识:精灵表的切帧 5. 基础知识:使用MV中的动画 6. Scene_TankWarTitle类解析 7. Sprite_Bullet类解析 8. Sprite_Explode类解析 9. Sprite_Tank类解析 10. Sprite_Enemy类解析 11. Scene_TankWar类解析 12. Scene_TankWarGameOver类解析 【实例教程6】存档的加密解密与保护 1. 找出MV存档和读档的方式 2. 制作MV存档的修改器 3. 如何保护存档? 4. 制作一个存档保护插件 【实例教程7】制作一个传送插件 1. 传送插件的主要功能 2. 将自定义数据保存到存档中 3. meta数据的使用 4. 使用地图备注登记传送点 5. 在插件中解析并记录传送点 6. 使用地图备注登记多个传送点并在插件中记录 7. 制作传送点选取窗口显示传送点数据 8. 将物品或技能标记为传送物品、传送技能 9. 显示传送动画实现传送功能 10. 禁止使用传送道具或传送技能 11. 实现插件命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值