2D图形效果101:丢东西
我的桌面应用程序中有一个页面,并且已经实现了简单的抓取和平移。效果很好。
当我们以这种方式平移并释放时,该页面在放置它的位置停止死机。
我希望它继续保持一定的动力,并最终停止。我猜想,它就像iPhone UI中的"抛出"一样。
我并不是真正追求完美,只是能够"抛出"该页面的一种非常简单的感觉。
解决方案
只需跟踪页面的当前速度及其位置即可。当用户释放时,将速度设置为上一次平移的速度。然后,在随后的帧中,以当前速度继续平移,并将当前速度降低一些固定量(大小),直到达到零为止。
我们可以通过跟踪位置来计算运动的速度。由于缺乏精确度,并且出于平滑的原因,我们将希望平均最后多个位置,假设它们是在几乎彼此间隔的时间范围内拍摄的。
一旦获得了这些平均值,就可以根据想要显示效果的程度来调整速度。计算完平均值后,只需在平均值上添加一个常数乘数即可。
从这里开始,我们将以该速度移动窗口,并降低速度直到其达到0。降低的速度还取决于个人喜好。如果我们希望窗口移动更长的时间,则与希望更快停止窗口的速度相比,我们将以较慢的速度降低速度。
如果我们想获得"弹跳"效果,只需检查窗口何时碰到屏幕侧面即可。如果它碰到左侧或者右侧(即,WindowX <= 0或者WindowX + WindowWidth> = ScreenWidth),则将X速度乘以-1以向另一个方向发送。 Y轴也一样。如果我们不添加"弹跳"效果,我建议至少进行相同的检查,但是当它碰到屏幕侧面时,我们将其强行推回到屏幕中(即WindowX> = 0和WindowX <= ScreenWidth WindowWidth)将速度设置为0,从而完全停止动画。
我也建议我们在最大速度上添加一个上限(即-x和x单位之间)。这将防止发生"某事"并且速度以疯狂的数字结束并且屏幕以每小时一百万英里的速度反弹的奇怪情况。