2011-08-11 32 views
2

我将iPhone上的游戏移植到了Android上。所有基于OpenGL的计算和完全相同的滚动计算。我注意到,在iPhone上滚动浏览游戏时,我可以更快速地滚动,并且当我举起手指时的起始速度与手指移动时的速度相同。如何在Android和iPhone上实现相同的投掷效果

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

有什么特别的关于android如何处理与iPhone不同的触摸?以及如何利用这一点来实现与iPhone上类似的感觉。在Android上,所有的应用程序在抛弃手指的速度时感觉不到手指移动的速度。

回答

2

我找到了。 android为ACTION_MOVE提供了一个ACTION_UP,用于相同(或关闭)的位置。 iPhone根本不会这样做!它只是给touchesEnded!所以如果有动作,我会至少在Android上有3分,但在iPhone上它的2分(触摸,在不同位置触摸)

接下来的事情是ACTION_MOVE和ACTION_UP不要在计算采样点的平均速度时会发生显着的时间间隔。

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

摘要

在Android上,如果您已经移动你的手指,你一个ACTION_UP之前得到ACTION_MOVE。并且ACTION_UP大致位于ACTION_MOVE的相同位置,看起来就好像最后的速度大致为0. iPhone不会这样做,iPhone不会为最后一次触摸提供触摸移动已终止(IE touch down,move finger,lift ,如果你在iPhone上做得足够快,你不会得到触摸的中间事件移动你的手指,就像你在Android上做的那样)。

的Android/iPhone等同的

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

而且我发现在Android上有一些点历史记录功能。我没有使用这些。我在我自己的数组中存储触摸和时间戳。

+0

你可以编辑这个,但参考事件?例如ACTION_UP – Ian

0

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

另外,是的,android的触摸处理似乎有点慢。你可能会添加一些“巧妙的因素”来获得更接近的反应(可能是+ 10%或类似的)。但是,这表示,android应用程序的'flinging'速度是触摸屏和框架的特定数学计算的组合,用于确定投掷速度和衰减速度 - 所以就应用程序而言,您可能会看到很多不同数学/两种平台之间的方法。

+0

我将触摸转化为游戏单位,并根据这些进行所有计算。所以它的游戏单位是每秒。 –

+0

当手指移动时,Android始终会提供触摸移动事件。这两个事件在时间上是分开的,但是在相似的位置,因此当时的速度大致为零。 iPhone那些不这样做。我会稍后发布解决方案,以便我如何正常工作:)。现在在游戏中抛东西的感觉和iPhone一样。 –

相关问题