关于Javascript游戏按键操控移动的思考

来源:互联网 发布:国际服务器端口定义 编辑:程序博客网 时间:2024/06/05 10:19

当前想到的最好的实现办法自然是在每一帧设置好对象的加速度,且不断调用函数,在speed上加上acceleration,在position上加上speed。无论是position、speed还是acceleration,都是对象自己的属性,与函数本身无关,所以这样的方法应当还是不错的,现在的主要问题就是“在什么情况下去设置position等值”。

有关连续触发的问题

为判断一次按键是单次按下还是按住不动,这中间设置有停顿,当你按住一个键不动时,会有延迟,为了有良好的体验,不应该将设置position的操作与keydown事件直接绑定。之前想过“当按下键时,设置setInterval,并取消事件绑定;松开键时,clearInterval”,但会引起一些问题诸如“clearInterval后直接取消了移动,那减速怎么办?又绑定一个减速事件?”、“松开按键减速未完成时又按下进行加速的情况如何处理?多个Interval并行?”、“取消绑定事件后,下一次触发怎么办?在松开后重新绑定keydown事件?”。我觉得这些解决办法都不好。

现在想到的较好的办法是:
利用持续按键的第一次触发是及时触发的,将setInterval只给第一次。也就是执行改变acceleration,然后`判断Interval是否存在,不存在时:按下键setInterval;存在时:只改变acceleration。而keyup事件也只需要改变acceleration。当然,setInterval的函数中应当包含一个若减速到0则clearInterval的语句。

未解决的问题

我是分x、y轴设置的分速度,并设置了最大速度。但当我同时按下两个键是对象斜着运动时,那么事实上其最大速度就变成了我设置最大速度的2倍,显然这是不符合要求的,不能因为对象换了个方向运动就使得其最大速度改变了。请大家不吝赐教。

0 0
原创粉丝点击