平滑滚动/惯性滚动/动量滚动

jfi*_*isk 9 iphone android opengl-es matrix-multiplication

我在Android中有一个OpenGL ES View,由一个矩阵控制进行翻译.我试图找出一种方法来获得动态滚动的提示,如谷歌地图应用程序或iPhone中所见.谢谢.

Loï*_*oix 11

如果您的问题是2d,那很简单

  1. 您需要获得每帧中的经过时间
  2. 您的onTouch功能将找到手指的加速度.我忘记了如何从远处获得加速度的公式.它应该是具有时间变量的位置的二阶导数.但是你应该总是在加速度中转换deltaX,deltaY.为了方便起见,你真的不需要在那里准备一些东西.编辑:我不知道为什么我没有看到它,但功能都在那里......

    acceleration.x = 2(newposition.x - position.x - speed.x*elapsedTime)/(elapsedTime*elapsedTime);

  3. 加速后,您可以使用该代码设置新位置.这是2d中简单的物理动力学.通过加速,你可以找到你的速度和你的速度,你可以找到你的下一个位置.

    speed.x = (float) (mass * acceleration.x * elapsed + speed.x);
    speed.y = (float) (mass * acceleration.y * elapsed + speed.y);
    
    
    position.x += mass * acceleration.x / 2 * elapsed * elapsed + speed.x * elapsed;
    position.y += mass * acceleration.y / 2 * elapsed * elapsed + speed.y * elapsed;
    
    
    speed.x *= friction;
    speed.y *= friction;
    
    Run Code Online (Sandbox Code Playgroud)

质量和摩擦力可以让您定义它的速度以及它自身减速的速度.您可能需要调整代码,因为如果必须向后滚动以减慢速度,这种动态并不是很好.

在每帧结束时,您必须将加速度重置为(0,0).并且在触摸均匀后的每个新帧上,加速度应设置为某个值.它应该工作得很好:)