問題を解決しなければならなかった-画面の向きに応じてandengineで記述された4つの異なるゲームを実行します。 通常の位置-風景とポートレートは問題を提起しませんでした。 残りの規定については疑問が生じた-示された規定については反対。 デバイスを反転するための4つのオプション。 センサーの使用に頼らなければなりませんでした。 次のアプローチは、AndEngineだけでなく、通常のアクティビティにも適用されます。
まず、空間内のデバイスの位置を計算するセンサーを扱うクラスを作成しました。
public class SensorRotation { private SensorManager sensorManager; private long lastUpdateTime; private int orientation = 1; private SensorEventListener sensorListener; private Activity activity; private boolean rightPosition = false; public SensorRotation instance; public SensorRotation(Context context) { sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); lastUpdateTime = 0; } public void register(Activity activity, SensorEventListener listener) { try { if (sensorListener != null) { sensorManager.unregisterListener(sensorListener); } this.sensorListener = listener; this.activity = activity; sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); Log.v("Activity = " + activity.getLocalClassName()); } catch (Exception e) { e.printStackTrace(); } } public void unregister() { sensorManager.unregisterListener(sensorListener); Log.v("unregister"); } private boolean in(float value, int min, int max) { return (value > min && value < max); } private int getCurrentOrientation(SensorEvent event) { float y = event.values[1]; float z = event.values[2];
次に、ゲームアクティビティの残りが継承されるアクティビティを作成します。
public abstract class TalentGameActivity extends BaseGameActivity implements SensorEventListener { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { if (GameModel.getInstance().sensorRotation.onSensorChanged(event)) {
次に、すべてのゲームアクティビティを作成します。 180度逆さまにしなければならないアクティビティは、作成プロセス中に、以下で説明するようにカメラを180度逆さまにする必要があります。
public class Drums extends TalentGameActivity { @Override public Engine onLoadEngine() { super.onLoadEngine(); mCamera = new Camera(0, 0, Const.ENGINE_PORTRAIT_WIDTH, Const.ENGINE_PORTRAIT_HEIGHT); mCamera.setRotation(180);
以上です。