加速度センサーは(少なくとも Android環境では)3軸上の端末の加速度を計測します。この加速度から、端末の傾きや向きを算出できます。
加速度は、メートル毎秒毎秒(m/s²)単位で計測されます。軸が地球の中心を向かって真っ直ぐ指している場合、加速度はおよそ -10 m/s²となります。 反対の方向を指している場合、加速度は 10 m/s²となります。
Android 端末での各軸は以下のように設定されています:
残念ながら、タブレットの場合はこの設定が違ってきます。 Android 端末には、既定の向きと呼ばれる概念があります。携帯の場合、縦向きモード(上記の画像のような) が既定の向きです。タブレットの場合、横向きモードが既定の向きです。既定が横向きの端末では、Y軸が端末の短い側面に向かって上に伸びてX軸が端末の長い側面に向かって右へ伸びるようにするために、軸の回転を行います。
Libgdx ではこれに対処し、既定が横向きの端末であっても上記画像のような加速度の読み込みを行います (Z軸の正の向きは画面の外を指し、X軸の正の向きは端末の長い側面に沿って右を指し、Y軸の正の向きは端末の短い側面に沿って上を指します)。
Android 端末が変われば、ハードウェア構成も変わります。以下のようにして端末が加速度センサーを使用できるかどうか確認します:
boolean available = Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer);
ゲームで端末の現在の向きを知る必要がある場合は、以下のメソッドが使用できます:
int orientation = Gdx.input.getRotation();
上記メソッドは 0、 90、 180 、 270といった戻り値を返し、元々の向きと現在の向きの角度差を伝えます。
元々の向きは、縦向きモード(上記画像のような)か横向きモード(主にタブレットの場合)のどちらかになります。 この情報は以下のように照会します:
Orientation nativeOrientation = Gdx.input.getNativeOrientation();
上記メソッドでは Orientation.Landscape もしくは Orientation.Portraitを戻り値として返します。
加速度センサーの読み取りには、libGDXではポーリングを介してのみアクセスできます:
float accelX = Gdx.input.getAccelerometerX(); float accelY = Gdx.input.getAccelerometerY(); float accelZ = Gdx.input.getAccelerometerZ();
加速度センサーをサポートしていないプラットフォームや端末では、0が戻り値として返ります。
加速度センターを使った例を見たい場合は、Super Jumperでもゲームを参照してください。
描写のために端末の向きを使用したい場合は、マトリックスの回転を使用すると良いかもしれません。 説明についてはこのリンクを参照してください 。 回転させたマトリックスは、OpenGL の描写でそのまま使用できます:
Matrix4 matrix = new Matrix4(); Gdx.input.getRotationMatrix(matrix.val); // use the matrix, Luke