Как определить ориентацию Windows Phone 7 в игре XNA? - PullRequest
2 голосов
/ 19 марта 2010

Похож на этот вопрос , но ищет ответ, который будет работать в контексте игры XNA.

Как определить, находится ли устройство в альбомной или портретной ориентации? Ответ, данный в общем вопросе, основан на функциональности, встроенной в PhoneApplicationPage. AFAIK, вы обычно не используете этот класс в контексте игры XNA на Windows Phone 7.

Ответы [ 3 ]

3 голосов
/ 20 марта 2010

От Ника Грейвелина: http://forums.xna.com/forums/p/49684/298915.aspx#298915 Акселерометр больше не входит в структуру XNA Framework.Вы можете получить к нему доступ с помощью этих шагов:

  1. Добавить ссылку на Microsoft.Devices.Sensors.dll
  2. Добавить 'using Microsoft.Devices.Sensors;'к вашим заявлениям использования.
  3. Подключите событие и начните читать акселерометр:

Попробуйте это:

try  
{  
    AccelerometerSensor.Default.ReadingChanged += Default_ReadingChanged;  
    AccelerometerSensor.Default.Start();  
}  
catch (AccelerometerStartFailedException)  
{  
}
Добавьте сам обработчик события:

Примерно так:

void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)  
{  
}

И все готово.Имейте в виду, однако, что акселерометр не работает с эмулятором, поэтому нет способа действительно проверить это без устройства.Вам нужно попробовать / поймать, потому что Start вызовет исключение в эмуляторе, потому что он не поддерживает акселерометр.

1 голос
/ 27 февраля 2011

Это изменилось, кажется. Чтобы подключиться к «измененному показанию», вы должны создать акселерометр, а затем запустить его. Требуемый код можно найти на MSDN. Получение данных акселерометра (Windows Phone)

выглядит примерно так:

#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
0 голосов
/ 25 июля 2010

Вот сообщение из блога Шона Харгривза

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

Если вы хотите автоматически переключаться между альбомной и портретной ориентацией при повороте телефона:

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

Переключение между LandscapeLeft и LandscapeRight может выполняться автоматически без специальной помощи от игры, и поэтому включено по умолчанию. Но переключение между альбомным и портретным изменяет размеры заднего буфера (короткие и широкие против высоких и тонких), что, скорее всего, потребует от вас настройки макета экрана. Не все игры смогут справиться с этим (и некоторые дизайны имеют смысл только в одну сторону), поэтому динамическое переключение между альбомным и портретным режимом доступно только для игр, которые явно согласились, установив SupportedOrientations.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...