如何在Android OpenGL中提高手指触摸立方体的速度?

时间:2012-02-09 06:36:18

标签: android

我正在开发一个Android应用程序,在这个应用程序中我遇到了关于3D Cube旋转的问题。我想根据fingure touch旋转我的立方体。

  • 如果用户在移动屏幕上触摸快速,那么立方体应该快速移动并在一段时间后缓慢停止-2。
  • 如果用户慢慢接触,那么立方体应该缓慢移动。

直到现在我已经尝试过这个不能轮换的代码 -

            //Rotate around the axis based on the rotation matrix (rotation, x, y, z)
    gl.glRotatef(PhotoCube3DLWPActivity.xrot, 1.0f, 0.0f, 0.0f);    //X
    gl.glRotatef(PhotoCube3DLWPActivity.yrot, 0.0f, 1.0f, 0.0f);    //Y
    gl.glRotatef(PhotoCube3DLWPActivity.zrot, 0.0f, 0.0f, 1.0f);    //Z

    cube.draw(gl);                  //Draw the Cube 

    //Change rotation factors (nice rotation)
    PhotoCube3DLWPActivity.xrot +=0.3f;;
    PhotoCube3DLWPActivity.yrot +=0.2f;
    PhotoCube3DLWPActivity.zrot +=0.4f;

其中xrot,yrot和zrot是PhotoCube3DLWPActivity类的静态变量,其值分别为0.3f,0.2f和0.4f。

我正在使用的Touch事件 -

     @Override
    public void onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN :
                Log.i("check", "Hey action down");
                downX = event.getX();
                downY = event.getY();
                downTime = System.currentTimeMillis();
                break;
            case MotionEvent.ACTION_MOVE :
                // handle in between rotation

                break;

            case MotionEvent.ACTION_UP :
                Log.i("check", "Hey action up");
                diffX = event.getX() - downX;
                diffY = event.getY() - downY;
                diffTime = System.currentTimeMillis() - downTime;

                diffTouch = (float) Math.sqrt(diffX * diffX + diffY * diffY);

                diffSpeed = diffTouch / diffTime * 1.0f;

                diffAngle = (float) Math.atan(diffY / diffX);

                xrot += diffSpeed * Math.sin(diffAngle);
                yrot += diffSpeed * Math.cos(diffAngle);

                break;
        }

    }//touch end

1 个答案:

答案 0 :(得分:1)

您可以尝试实施简单的Fling手势检测,并根据速度调整旋转速度。

要实现GestureDetector,您可以查看以下内容,

Fling Gesture