2

我将游戏从 iPhone 移植到 android。所有基于 OpenGL 的滚动计算完全相同。我注意到,在 iPhone 上滚动游戏时,我可以更快地滚动,并且当我抬起手指时的启动速度感觉就像我的手指在移动一样。

然而,不幸的是,在安卓设备上,这并不相同。当我在滚动时抬起手指时,开始滚动速度感觉较慢。在 iPhone 上滚动感觉更准确。

android如何处理与iPhone不同的触摸有什么特别之处吗?以及如何利用这一点来获得与 iPhone 类似的感觉。在 Android 上,所有应用程序在挥动手指时的速度与手指移动的速度不同。

4

2 回答 2

3

我找到了。android 为相同(或关闭)位置提供 ACTION_MOVE 然后 ACTION_UP。iPhone根本不这样做!它只是给了一个touchesEnded!因此,如果有动作,我将至少在 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 不会为最后一次 touchesEnded 提供 touchesMoved(IE 触摸,移动手指,抬起,如果你在 iPhone 上做得足够快,你不会得到 touchesMoved 你的手指的中间事件,就像你在 android 上所做的那样)。

Android / iPhone等效的

  1. ACTION_UP = touchesEnded
  2. ACTION_DOWN = touchesBegan
  3. ACTION_MOVE = touchesMoved

我还注意到在 Android 上有一些点历史功能。我没有使用那些。我在我自己的数组中存储了触摸和时间戳。

于 2011-08-12T14:18:42.450 回答
0

您是否考虑了屏幕的 dpi 或屏幕的分辨率,以每秒点数还是每秒 px 为单位进行投掷?这很容易影响事情。

另外,是的,android的触摸处理似乎有点慢。您也许可以添加一定量的“软糖因子”以获得更接近的响应(可能 +10% 或类似的东西)。但话虽如此,Android 应用程序的“投掷”速度是触摸屏和框架用于确定投掷速度和衰减率的特定数学计算的组合——因此,就您的其他应用程序而言,您可能只是看到了很多不同两个平台之间的数学/方法。

于 2011-08-11T19:13:03.940 回答