代码之家  ›  专栏  ›  技术社区  ›  Will

2d图形效果101:投掷某物[关闭]

2d
  •  0
  • Will  · 技术社区  · 16 年前

    我的桌面应用程序中有一个页面,我实现了简单的抓取和平移。效果很好。

    当你用这种方式摇摄并释放时,页面会停在你掉下来的地方。

    我希望它继续稍微有点势头,并最终停止。我想更像iphone用户界面中的“投掷”。

    我并不是真的在追求完美,只是一种可以“扔”那一页的简单感觉。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Adam Rosenfield    16 年前

    只需跟踪页面的当前速度及其位置。当用户释放时,将速度设置为上次平移的量。然后,在随后的帧中,继续按当前速度摇摄,并将当前速度减少一些固定量(数量级),直到其达到零。

        2
  •  3
  •   Spodi    16 年前

    你可以通过跟踪位置来计算运动的速度。由于缺乏精确性,并且出于平滑的原因,您将希望对最后的多个位置进行平均,假设它们是在彼此相隔的几乎均匀的时间帧中进行的。

    一旦你得到了这些的平均值,你就可以根据你想要的效果来调整你的速度。一旦计算出平均值,只需在平均值上加上一个常数乘数。

    从这里开始,你将以这个速度移动窗口,降低速度直到它达到0。下降的速度也取决于个人偏好。如果你希望窗口在更长的时间内移动,你将以比你希望它停止得更快的速度降低速度。

    如果你想要一个“反弹”效果,只要检查一下当窗口击中屏幕的一侧。如果它击中左侧或右侧(即windowx<=0或windowx+windowwidth>=screenwidth),则将x速度乘以-1将其发送到另一个方向。Y轴也是如此。如果不添加“反弹”效果,我建议至少执行相同的检查,但当它到达屏幕的一侧时,将其强制返回屏幕(即,windowx>=0和windowx<=screenwidth-windowwidth),将速度设置为0,从而完全停止动画。

    我也建议你在最大速度上加一个上限(即在-x和x单位之间)。这将防止奇怪的情况,即“某物”发生,速度以一个疯狂的数字结束,屏幕以每小时一百万英里的速度反弹。