物理问题:仅从速度计算距离

时间:2011-06-17 14:29:49

标签: flash flex4 physics game-physics

我在Flex / Flash中创建一个基于拖动的控件,类似于电影胶片,个人可以水平滑动以滚动项目。为了让控制感觉更自然,我添加了一些惯性来减慢滑动一旦发生滑动。首次加载时,视图中将有五个项目,其中“x”个项目将滚动浏览,第三个项目居中并被选中。

我的问题是,我想要在制作动画时,滑动手势以确定某个项目是否会在中间(第3个位置)结束并相应地调整其移动计算,以便它与第3个/中心位置对接。想象一下,你进行了长时间的滑动,它会飞过过去'x'的物品,但是当它减速到停止时它优雅地停在物品居中/位于第3位置。要做到这一点,我相信我需要确定从速度值开始行进的距离(因为时间对于用户体验是无关紧要的,即更长/更强的滑动将证明更长的动画浏览项目是合理的。)

当用户生成MOUSE_UP事件时,我正在调用ENTER_FRAME事件中的动画例程(带惯性)。当他们这样做时,我获得拖动的速度(通过事先监视),然后在每次调用ENTER_FRAME事件时减小此速度值,直到达到适当的值来停止动画。

不幸的是,我所看到的所有速度计算都与速度和时间有关,以确定距离,我只需要速度。不可否认,我在这方面的知识并不强,所以我可能会忽略这一点。

提前干杯......

2 个答案:

答案 0 :(得分:0)

如果您使用默认减速度值,首先确定您最终的位置,然后在滚动到该位置时确定哪个项目最接近中心,然后计算一个新的减速度值,该值最终完全在该项目上。

我不记得在数学上做了这样的计算,但这是微积分,可能是积分或类似的东西。

这样你可以计算你想要的时间,但你不需要提前知道。

(顺便说一下,我认为你需要做一个特殊的情况,即滑动速度不够快,甚至不能移动到一个项目。用户可能只是略微摇动鼠标,在这种情况下你应该有当前的项目重新定位。)


我个人不会采取你要采用的方法。我只是允许它以默认减速度值滚动,然后慢慢居中,当速度低于某个阈值时,最接近的项目最近。这意味着该项目可能会超调,然后慢慢向后滚动,但我认为稍微超调然后修正看起来会很酷。

答案 1 :(得分:0)

如果每次输入新帧时将速度减去固定量(称之为D),并在速度降至某个阈值以下时停止,则问题非常简单。将阈值设置为,例如,0.7 * D,然后您可以将初始速度除以D并向下舍入,这将为您提供您将遍历的帧数,将其称为N.然后将初始速度降低到,例如,(N + 0.01)* D,你已经完成了。