在这个网站上搜索之后,我发现我无法控制浏览器的mousemove事件频率。
所以我想应用某种外推方法来解决滞后的mousemove事件问题。
当mousemove事件被触发时,我记录每个鼠标位置,并计算加速度(利用有限差分获得速度,然后计算加速度)。
在此之后,在render()函数中,我测量了自上次render()函数调用以来所经过的增量时间。最后,我用加速度和dt来推断位置。
但我看不到使用这种方法有任何显着的效果。有什么问题吗?
编辑:我在这里做了一个小的运行示例。(抱歉,问题陈述不清楚)
发布于 2012-10-09 20:01:15
就在我把代码粘贴到要点上之后,我意识到了这个问题,然后修复了这个bug。
问题是:
我使用NDC坐标来计算导数,而我使用世界空间坐标来进行外推。
这是新的代码:
https://gist.github.com/3858277
结论:对滞后的mouseevent有一定的影响,但影响不大。作为一个(不好的)副作用,当你的鼠标移动进行紧急刹车时,会出现过冲。
我仍然在寻找一个更好的解决方案。欢迎任何意见/建议。谢谢。
发布于 2012-10-09 20:09:59
我不确定你是否会用外推法做得更好。当前所有的浏览器都为javascript维护一个线程,它可以是每个标签页(Chrome)或每个浏览器窗口(Firefox)。因此,如果你在你的脚本中工作,当你的脚本运行时,浏览器根本不会触发鼠标移动事件。
因此,提高mousemove更新频率的最好方法是优化您的其他javascript,以摆脱mousemove事件的影响。一种方法是使用更多的异步调用。因此,您可以编写代码以使用循环的下一步调用setTimeout(nextFunc, 0),这将从脚本传回控制权,并允许在循环的下一步之前触发事件。
*单线程和同步计算规则的例外是WebWorkers,它允许您与其余执行并行执行特定的一组事情,主要是那些不涉及DOM的事情。
https://stackoverflow.com/questions/12782418
复制相似问题