赞 | 88 |
VIP | 10 |
好人卡 | 3 |
积分 | 50 |
经验 | 27255 |
最后登录 | 2018-10-15 |
在线时间 | 1780 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 5039
- 在线时间
- 1780 小时
- 注册时间
- 2012-7-3
- 帖子
- 1799
|
本帖最后由 defisym 于 2017-11-21 23:09 编辑
不是特别明白……大概理解了一下
我的理解是,两个键只是在玩家看来是“几乎同时”按下,而需要用程序来判定究竟是那一个先按下,而不是按照同时按键的键值优先值执行
那么首先有一点需要判明的是,这个“几乎同时”的时间间隔必须要大于事件循环的最小时间间隔,也就是1帧
这样一来只要解决逻辑的问题了,可以用“中断”这个概念来类比构思
也就是说,玩家的每一次按键都会产生一次中断,按照这个思路:
0.通常状态,允许按键中断A
1.玩家按下任意按键,进入中断A,同时允许中断B——中断B只能在中断A开启的时候才能开启
2.中断B中玩家按下任意按键,获取当前的按键并执行相应操作,同时排除一起按下上下与左右这种直观上不会移动的情况
3.判断玩家是否松开按键,如果是处于中断A,则关中断A,如果是处于中断B,则再次判定当前是否按键(例如按下←和↓,↓稍后,但是玩家先松开了↓继续按住←的情况),如果松开了一个按键,则关中断B,如果松开了所有按键,关中断B和A
4.循环
对应到当前软件的事件系统,打开中断A时允许中断B则可以对应成B仅仅在打开某个开关或变量处于某个特定值时执行
随随便便的写了一些,具体实现起来的逻辑要更加的复杂,比如说要判定玩家按下三个按键依次松开等等,当然你也可以无视问题中的“判断最后一次按键”,直接将相反方向的按键去掉只选择第三个方向,等等
以上,希望能帮助到你
(事实上你只要将NPC设定成“跟随玩家”就行了,不同的是需要判断与玩家的距离,例如距离间隔小于2格的时候停止运动改为静止等等,移动速度也相应根据玩家是否按下了加速与距离等等动态调整,将寻路这些麻烦的恶心的复杂的事情交给系统去做就行了(逃)
|
|