Pregunta

Al igual que en esta pregunta , pero en busca de una respuesta que va a funcionar en el contexto de un juego XNA.

¿Cómo puedo determinar si el dispositivo está en una orientación horizontal o vertical? La respuesta dada en la pregunta general se basa en la funcionalidad incorporada en PhoneApplicationPage. Que yo sepa, que normalmente no se utiliza esa clase en el contexto de un juego XNA en Windows Phone 7.

¿Fue útil?

Solución

A partir de Nick Gravelyn: http: // foros. xna.com/forums/p/49684/298915.aspx#298915 Acelerómetro no está en el XNA Framework más. Puede acceder a ella a través de estos pasos:

  1. Añadir una referencia a Microsoft.Devices.Sensors.dll
  2. Añadir 'usando Microsoft.Devices.Sensors;' utilizando a sus declaraciones.
  3. Conecta un evento y comenzar a leer el acelerómetro:

Prueba esto:

try  
{  
    AccelerometerSensor.Default.ReadingChanged += Default_ReadingChanged;  
    AccelerometerSensor.Default.Start();  
}  
catch (AccelerometerStartFailedException)  
{  
}
  1. Añadir el controlador de eventos en sí:

De esta manera:

void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)  
{  
}

Y ya está bueno para ir. Tenga en cuenta, sin embargo, que el acelerómetro no funciona con el emulador lo que no hay manera de probar realmente esto sin un dispositivo. Sí es necesario que try / catch porque Start lanzar una excepción en el emulador, ya que no es compatible con el acelerómetro.

Otros consejos

Esto ha cambiado lo que parece. Con el fin de enganchar en la 'lectura cambió' usted tiene que crear un acelerómetro, y luego inicia. El código necesario se puede encontrar en MSDN. Recuperando la información del acelerómetro (Windows Phone)

se ve algo como esto:

#if WINDOWS_PHONE
    Accelerometer accelerometer;
    try
    {
        accelerometer = new Accelerometer();
        accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(a_ReadingChanged);
        accelerometer.Start();
    }
    catch (AccelerometerFailedException e)
    {
    }
    ...
}

void a_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
    //this function is not supported by the window 7 phone emulator
    throw new NotImplementedException();
}
#endif

Aquí hay un post de blog Shawn Hargreaves

http://blogs.msdn.com/b/shawnhar/archive/2010/07/12/orientation-and-rotation-on-windows-phone.aspx?utm_source=twitterfeed&utm_medium=twitter

Si desea cambiar automáticamente entre ambas orientaciones horizontal y vertical ya que el teléfono se gira:

graphics.SupportedOrientations = DisplayOrientation.Portrait | 
                                 DisplayOrientation.LandscapeLeft | 
                                 DisplayOrientation.LandscapeRight;

El cambio entre LandscapeLeft y LandscapeRight puede ser manejado de forma automática sin la ayuda especial del juego, y por lo tanto está activado por defecto. Pero el cambio entre horizontal y vertical altera las dimensiones BackBuffer (frente a nivel de corto y alto y delgado), que lo más probable es que tenga que ajustar su diseño de la pantalla. No todos los juegos serán capaces de manejar esto (y algunos diseños sólo tienen sentido de una forma hacia arriba), de modo de conmutación dinámica entre horizontal y vertical sólo se habilita para los juegos que opt-in de forma explícita mediante el establecimiento de SupportedOrientations.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top