エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 用の Direct3D アプリから画面の向きを検出する方法

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

 

このトピックでは、Windows Phone Direct3D アプリ から電話の向きを判別する方法について説明します。センサー API を使用すると、電話の向きを判別できます。この方法は拡張現実のアプリとゲームに便利ですが、電話が縦向きモードか横向きモードかのどちらであるかだけを知りたい場合は、複雑になりすぎ、コストがかかります。代わりに、アプリで DisplayProperties クラスの CurrentOrientation プロパティを照会して、電話の現在の向きを取得する方法があります。戻り値は、電話が縦、横、縦 (回転)、横 (回転) のどの向きであるかを示す DisplayOrientations 列挙のメンバーです。or 演算子と組み合わせて、AutoRotationPreferences プロパティを次の 1 つ以上の列挙値に設定すると、これらのどの向きがアプリでサポートされるかを指定することもできます。

アプリが短期間実行された後に現在の向きを確認すると、CurrentOrientation の値が正確になります。ただし、アプリを最初に起動した時点では、加速度計が起動して OS で向きを判別するのに要する時間は変動する可能性があるため、OrientationChanged イベントにサブスクライブすることをお勧めします。AutoRotationPreferences を設定する際に指定したいずれかの向きに電話が動くと、このイベントが発生します。既に縦向き以外の向きの電話でユーザーがアプリを起動し、自動回転の設定にこの向きを含めている場合は、アプリの起動時にイベントが発生します。もちろん、アプリの実行時に向きの変更に対するアラートが必要である場合にもこのイベントを使用できます。

メモメモ:

DrawingSurface または DrawingSurfaceBackgroundGrid グリッドを使用してマネージ アプリで Direct3D グラフィックを表示するアプリでは、このメソッドを使用して向きを判別することはできません。マネージ コードを使用して向きの変更を検出する方法の詳細については、「クイックスタート: Windows Phone 8 の画面の向き」を参照してください。

向きの変更の検出

  1. 新しい Direct3D プロジェクトを作成します。この例では、プロジェクトに、“NativeFundamentals” という名前が付けられていることを前提にしています。

  2. NativeFundamentals.h ヘッダー ファイルで、OrientationChanged イベントのハンドラーを宣言します。また、現在の向きを格納するメンバー変数を宣言します。

    
    	void OnOrientationChanged(Platform::Object^ sender);
    
    
    
    
    	Windows::Graphics::Display::DisplayOrientations m_currentOrientation;
    
    
    
  3. NativeFundamentals.cpp ファイルの先頭で、using ディレクティブを追加して、Windows.Graphics.Display 名前空間を含めます。

    
    using namespace Windows::Graphics::Display;
    
    
    
  4. NativFundamentals.cpp の OnActivated メソッドで、メンバー変数を DisplayOrientations::Portrait に設定します。これは、既定の向きです。電話がこの向きである場合、OrientationChanged は発生しません。

    
    	m_currentOrientation = DisplayOrientations::Portrait;
    
    
    
  5. 次に、OnActivated で、アプリでサポートされている向きを設定します。OrientationChanged が発生するのは、このプロパティを使用して設定した向きに電話が動いた場合に限定されます。

  6. 再度、OnActivated で、OrientationChanged イベントに対して宣言したイベント ハンドラーをフックします。

  7. 最後に、NativeFundamentals.cpp で、CurrentOrientation プロパティをチェックしてイベント ハンドラーを実装します。

    
    void NativeFundamentals::OnOrientationChanged(Object^ sender)
    {
    	m_currentOrientation = DisplayProperties::CurrentOrientation;
    }
    
    
    

表示:
© 2014 Microsoft