如何在android&上实现相同的投掷结果苹果手机

时间:2011-08-11 19:03:38

标签: iphone android scroll touches

我将游戏从iPhone移植到了android。所有基于OpenGL的,以及完全相同的滚动计算。我注意到在iPhone上滚动浏览游戏时我可以更快地滚动,当我抬起手指时的起始速度与我的手指移动时一样。

然而在Android设备上不幸的是,这不一样。当我滚动时抬起手指,开始滚动速度感觉更慢。滚动iPhone感觉更准确。

关于android如何处理与iPhone不同的触摸有什么特别之处吗?我怎样才能利用这一点来实现与iPhone类似的感觉。在Android上所有的应用程序,当我甩开我的手指的速度时,感觉与我的手指移动的速度不一样。

2 个答案:

答案 0 :(得分:2)

我找到了。 android为相同(或关闭)位置提供ACTION_MOVE然后ACTION_UP。 iPhone完全没有这样做!它只是给了一个touchesEnded!因此,如果有动作,我将至少在Android ALWAYS上获得3分,但在iPhone上它的2分(触地,在不同位置触摸)

接下来的事情是ACTION_MOVE AND ACTION_UP不会立即发生,并且在计算采样点的平均速度时它的显着时间间隔。

解决方案:在ACTION_UP上,如果存在ACTION_MOVE幻灯片,则存储所有秒数,以便在ACTION_UP发生时“发生”ACTION_MOVE。不要在速度计算中加上最后的触点。现在像往常一样计算速度。

<强>摘要

在Android上如果你动了手指,你会在ACTION_UP之前得到一个ACTION_MOVE。并且ACTION_UP大致位于ACTION_MOVE的相同位置,使得看起来好像最后的速度大约是0. iPhone不会这样做,iPhone不会给最后一次触摸的触摸移动(IE触摸,移动手指,提升,如果你在iPhone上做得足够快,你将不会获得触摸的中间事件移动你的手指,就像你在Android上那样。)

Android / iPhone等价物

  1. ACTION_UP = touchesEnded
  2. ACTION_DOWN = touchesBegan
  3. ACTION_MOVE = touchesMoved
  4. 我也注意到Android上有一些点历史功能。我没有使用那些。我在自己的数组中存储了触摸和时间戳。

答案 1 :(得分:0)

您是否考虑了屏幕的dpi或屏幕分辨率,以每秒点数或每秒px的速度进行飞行?这很容易影响事情。

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