我将一款游戏从 iPhone 移植到了 Android。全部基于 OpenGL,并且滚动计算完全相同。我注意到,在 iPhone 上滚动游戏时,我可以更快地滚动,并且抬起手指时的启动速度感觉与手指移动时的速度相同。
但是不幸的是,在 Android 设备上,这并不相同。当我在滚动时抬起手指时,开始滚动速度感觉更慢。在 iPhone 上滚动感觉更准确。
Android 处理触摸的方式与 iPhone 有何不同?我如何利用这一点来实现与 iPhone 类似的感觉。在 Android 上,所有应用程序在滑动时,我抬起手指的速度与我手指移动的速度感觉不一样。
最佳答案
我找到了。对于相同(或接近)的位置,android 会给出一个 ACTION_MOVE,然后给出一个 ACTION_UP。 iPhone 根本不这样做!它只是给出了一个触摸结束!因此,如果有运动,我在 Android 上至少有 3 个点,但在 iPhone 上有 2 个点(在不同位置触地、触地)
接下来的事情是ACTION_MOVE和ACTION_UP不会立即发生,并且在计算采样点的平均速度时其显着的时间间隔。
解决方案:在ACTION_UP上,如果有ACTION_MOVE,则滑动存储的所有秒数,以便ACTION_MOVE在ACTION_UP发生时“发生”。不要将最后的修饰点纳入速度计算中。现在像往常一样计算速度。
摘要
在 Android 上,如果您移动了手指,您会在 ACTION_UP 之前收到 ACTION_MOVE。并且 ACTION_UP 与 ACTION_MOVE 大致处于相同位置,使得结束时的速度看起来大约为 0。iPhone 不会这样做,iPhone 不会为最后一次 TouchEnded 提供 TouchMoved(IE 触碰、移动手指、抬起) ,如果您在 iPhone 上执行得足够快,您将不会获得 TouchMoved 手指的中间事件,而在 Android 上则如此)。
Android/iPhone 同等产品
- ACTION_UP = 触摸结束
- ACTION_DOWN = 触摸开始
- ACTION_MOVE = 已移动
我还注意到 Android 上有一些点历史功能。我没有使用那些。我将触摸和时间戳存储在我自己的数组中。
关于iphone - 如何在 Android 和 iPhone 上实现相同的 throw 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031384/