2016-04-18 16 views
2

私は、傾きがプレーヤーの主要な制御方法であるビデオゲームに取り組んでいます。 しかし、私はプレイヤーがソファに横たわっていてもゲームをプレイできるようにしたいと思います。 現在、このゲームはデバイスがフラットな場合に最適ですが、加速度計の開始点を計算するため少し傾けても機能します。しかし、これは予期しない結果をもたらします。Androidのデバイス傾斜角度

特定の出発点からデバイスの回転(度)を計算する方法はありますか?それはまったく可能ですか?誰でもこれを達成できましたか? 私はSpeedXが回転をマスターできることを知っていますが、傾斜のために必要です。

ありがとう

+0

ゲームを始めるときに、ユーザーにデバイスをキャリブレーションしてから、デバイスの現在の傾きを取得して開始チルトに保存するようなことができます。その後、デバイスの傾きを取得するたびに、(currentTilt-startingTilt)を実行します。基本的には、ゲームの開始時に、傾きを取得し、その開始傾きに関連する後の入力を管理します。 –

答えて

2

角度(回転)速度について一定のコールバックを得ることができます。それを角度の位置に変換するのはあなた次第です。 [1]

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

+0

ありがとうございます、ドキュメントは少し分かりにくいですが、私は助けになるこの素晴らしい例を見つけました: https://bitbucket.org/apacha/sensor-fusion-demo/ – xtrimsky

1

あなたは、開始の間の差を計算する必要がありますが、0から359度の範囲である

OrientationEventListener.onOrientationChanged() 

を介してデバイスの回転度を得ることができますポイントと回転角度の変化をあなた自身が知っている。

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

また、あなたは、リスナーのenable()disable()メソッドを呼び出すことで、このリスナーを有効または無効にすることができます。ここにはGoogleの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は、同じコードを実装し、適切な説明を提供する別の便利なリンクです。

関連する問題