Project1
标题:
同时按下两个按键不松开,怎么判断最后按下的是哪一个?
[打印本页]
作者:
CCD0645
时间:
2017-11-21 07:36
标题:
同时按下两个按键不松开,怎么判断最后按下的是哪一个?
好比,同时按“左”跟“下”,“左”稍微先,而“下”稍后一点,不松开,你就会看到主角先左行一步然后一直往下走。
也就是先按下的只执行一次,后按下的会一直执行直到松开为止。
根据这个逻辑,我想设置一个事件跟主角完全同步,即是按上下左右完全跟着走,单独按一个键是可以轻易判断按键然后同步的,唯独是同时按下两个方向时无法同步,需要怎样才能判断最后按下是哪个键?
作者:
眠
时间:
2017-11-21 07:48
看他代码怎么写而已。
--
反过来想,只要你获取的不是按键状态,而是玩家的行动状态就可以了。
作者:
张咚咚
时间:
2017-11-21 09:07
这个不需要在按键上判断吧,不是应该在移动上判断吗。。
作者:
king
时间:
2017-11-21 10:28
并行处理
当左键 按下时
角色
移动路线 左移
事件
移动路线 左移
当右键 按下时
角色
移动路线 右移
事件
移动路线 右移
…………
作者:
imsy
时间:
2017-11-21 13:17
我也赞同判断角色的行动而不是判断玩家的按键的思路,可以试试在并行处理里判断玩家坐标然后设置那个事件的移动路线看看
作者:
soulsaga
时间:
2017-11-21 13:42
用真八方向移动不就好了..
作者:
chd114
时间:
2017-11-21 16:18
按键获取并不对,主角撞墙的情况下继续按对应方向键依然是判定你按了,但是行动上他的位置并没有改变
作者:
soulsaga
时间:
2017-11-21 16:24
这个效果其实是不是跟队伍跟随一样?
作者:
defisym
时间:
2017-11-21 23:03
本帖最后由 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格的时候停止运动改为静止等等,移动速度也相应根据玩家是否按下了加速与距离等等动态调整,将寻路这些麻烦的恶心的复杂的事情交给系统去做就行了(逃
)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1