Я пишу простую игру с использованием библиотеки MonoGame. Насколько я знаю, MonoGame (в отличие от XNA) не поддерживает автоматически изменение ориентации телефона, и необходимо использовать RenderTarget2D, а затем нарисуйте его с правильной ориентацией. Для этого мне нужно определить текущую ориентацию телефона.Как получить ориентацию телефона с SupportedOrientations = "Портрет"
Для того, чтобы получить OrientationChanged события, я должен позволить GamePage.xaml использовать различные ориентации:
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
Проблема заключается в том, что в этом случае моего GamePage начинает менять ориентацию автоматически и в спрайтах альбомной ориентации растягивается горизонтально. Похоже, что в пейзажной позиции телефон считает, что он имеет такое же количество пикселей по горизонтали, как и в портретной ориентации (480 пикселей).
Этот эффект происходит без какого-либо ручного вращения. Код волочения:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(t, Vector2.Zero, null, Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 1);
spriteBatch.End();
base.Draw(gameTime);
}
Одним из решений запретить различные ориентации в GamePage.xaml:
SupportedOrientations="Portrait" Orientation="Portrait"
, но в этом случае я не могу получить OrientationChanged события нигде (GamePage. OrientationChanged или Game.Window.OrientationChanged). Я положить следующий код в конструкторе класса Game, но это не помогло
graphics.SupportedOrientations = DisplayOrientation.Portrait |
DisplayOrientation.PortraitDown |
DisplayOrientation.LandscapeLeft |
DisplayOrientation.LandscapeRight;
graphics.ApplyChanges();
this.Window.OrientationChanged += OrientationChanged;
Пожалуйста, сообщите мне, как получить OrientationChanged события и в то же время не позволяет GamePage изменить свою ось координат в ландшафтном режиме ,