Android

时间:2016-04-18 12:49:14

标签: android android-sensors

我正在开发一款视频游戏,其中倾斜是玩家的主要控制方法。 但我希望玩家能够在躺在沙发上玩游戏。 目前,如果设备是平坦的,游戏效果最好,如果你倾斜一点点仍然有效,因为我计算加速度计的起点。但这会产生意想不到的结果。

Android中是否有办法从特定的起点计算设备的旋转度(度)?它甚至可能吗?有人能够做到这一点吗? 我知道SpeedX能够掌握旋转,但我需要它来倾斜。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以获得有关角度(旋转)速度的常量回调。您可以将其转换为角度位置。 [1]

[1] http://developer.android.com/guide/topics/sensors/sensors_motion.html#sensors-motion-gyro

答案 1 :(得分:1)

您可以通过

获取设备旋转度数
OrientationEventListener.onOrientationChanged() 

范围从0到359度,但您必须自己计算起点和旋转度变化之间的差异。

void onOrientationChanged (int orientation) { 
    //orientation is an argument which represents rotation in degrees
}

您也可以通过调用侦听器的enable()disable()方法来启用和禁用此侦听器。以下是谷歌的deveoper reference docs

this是关于如何使用方向监听器的链接。

public class SimpleOrientationActivity extends Activity {
  OrientationEventListener mOrientationListener;

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      mOrientationListener = new OrientationEventListener(this,
          SensorManager.SENSOR_DELAY_NORMAL) {

          @Override
          public void onOrientationChanged(int orientation) {
            Log.v(DEBUG_TAG, "Orientation changed to " + orientation);

          }
      };

     if (mOrientationListener.canDetectOrientation() == true) {
         Log.v(DEBUG_TAG, "Can detect orientation");
         mOrientationListener.enable();
     } else {
         Log.v(DEBUG_TAG, "Cannot detect orientation");
         mOrientationListener.disable();
     }

  }

  @Override
  protected void onDestroy() {
      super.onDestroy();
      mOrientationListener.disable();
  }
}

还有其他适用于游戏和其他目的的费率值。默认速率SENSOR_DELAY_NORMAL最适合简单的方向更改。其他值,例如SENSOR_DELAY_UI和SENSOR_DELAY_GAME可能适合您。

This是实现相同代码并提供良好解释的另一个有用链接。