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

Flash 物理问题:仅从速度计算距离,flash,flex4,physics,game-physics,Flash,Flex4,Physics,Game Physics,我在Flex/Flash中创建了一个基于拖动的控件,类似于一个胶片条,个人可以在其中水平滑动以滚动项目。为了让控件感觉更自然一点,我添加了一些惯性,以便在滑动发生后减缓滚动。首次加载时,视图中将有五个项目,其中有“x”个项目可滚动浏览,第三个项目居中并选中 但我的问题是,在设置动画时,我需要一个滑动手势来确定项目是否会结束于中间位置(第3个位置),并相应地调整其移动计算,使其与第3个/中心位置对接。想象一下,你进行了一次长时间的侧击,它飞过了“x”数量的物品,但当它减速到停止时,它优雅地停止,物

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

但我的问题是,在设置动画时,我需要一个滑动手势来确定项目是否会结束于中间位置(第3个位置),并相应地调整其移动计算,使其与第3个/中心位置对接。想象一下,你进行了一次长时间的侧击,它飞过了“x”数量的物品,但当它减速到停止时,它优雅地停止,物品居中/位于第三位置。要做到这一点,我认为我需要根据速度值确定行驶距离(因为时间与用户体验无关,也就是说,较长/较强的滑动将证明较长的动画浏览项目是合理的)

此时,当用户生成鼠标向上事件时,我正在调用ENTER\u FRAME事件中的动画例程(带有惯性)。当他们这样做时,我获得了拖动的速度(通过事先监控),然后在每次调用ENTER_FRAME事件时减小该速度值,直到它达到适当的值以停止动画

不幸的是,我看到的所有速度计算都涉及速度和时间来确定距离,我只需要速度。诚然,我在这方面的知识并不丰富,所以我可能会忽略一些显而易见的东西


提前欢呼…

如果使用默认减速值,首先确定您最终到达的位置,然后在滚动到该位置时确定哪个项目离中心最近,然后计算一个新的减速值,该值恰好在该项目上结束

我记不起做这种计算的数学原理,但它是微积分,可能是积分之类的

这样,如果你愿意,你可以计算时间,但你不需要事先知道

(顺便说一句,我认为你需要做一个特殊的情况,滑动速度不够快,甚至不能移动一个项目。用户可能只是轻轻地晃动鼠标,在这种情况下,你应该让当前项目重新居中。)



但就我个人而言,我不会采取你所采取的方法。我会简单地允许它以默认的减速值滚动,然后当速度低于某个阈值时,慢慢地将最接近的项目居中。这意味着该项目可能会超出范围,然后慢慢向后滚动,但我认为稍微超出范围,然后再进行更正看起来会很酷。

如果每次进入新帧时将速度降低一个固定的量(称为D),并且在速度降到某个阈值以下时停止,那么问题就很容易解决。将阈值设置为,比如说,0.7*D,然后你可以将初始速度除以D并向下取整,这会给出你将要遍历的帧数,称之为N。然后将初始速度降低到,比如,(N+0.01)*D,你就完成了。

很明显:如果你正在制作动画,时间已经是一个因素。动画意味着随着时间的推移而改变。只是出于兴趣,你认为速度和速度之间的区别是什么?我看不到速度的矢量方面在这里发挥作用。@cHao-动画被调用,速度被重新渲染。动画的时间是未知的(或可能是可计算的),因为动画的每个周期的速度都会降低。@paxdiablo-抱歉,我在这里把我的话混在一起了。我有降低速度的速度和价值。谢谢@cHao的澄清。我很困惑,但这是有道理的。我想这就是执行这些计算时的问题,加速度不是一个常数,因为它在每次迭代中递减。为什么加速度会变化?只需改变速度,但不要改变加速度。此外,我认为在这种特殊情况下,抖动/摇摆效应是不可取的,因此需要计算距离,以实现优雅的对接。我不确定我是否能跟上你。我的减量是固定的(0.95),要停止的阈值是当速度达到0.05或以下,初始速度为每帧24像素时。这个数字是如何计算距离的?@SeanCocteau:24像素/帧?我想我误解了“帧”,因为你说你的控制“类似于一个电影带”。在您的示例中,代理将通过(24-0.05)/0.95=25帧(然后达到不健康状态,其速度为0.25,太快而无法停止,但太慢而无法进入下一帧)。一个项目有多宽,以像素为单位?