Графика ViewPevice изменяется при запуске игры и после возобновления из фона [Monogame on Android] - PullRequest
0 голосов
/ 31 марта 2020

Я уже давно в этом разбираюсь и никак не могу разобраться. На некоторых Android устройствах моя игра имеет вертикальную полосу «мертвого» пространства справа при запуске игры, и если я отправляю игру на задний план и повторно активирую ее, то я получаю дополнительную справа. Я добавил два GIFS к сообщению, чтобы помочь показать это.

Когда я проверяю GraphicsDevice.Viewport.X, он не равен нулю, я могу установить его обратно в ноль, но если я поставлю игру на задний план и верну ее обратно, значение X снова изменится. Я могу использовать приведенный ниже код, чтобы исправить его, но изо всех сил стараюсь найти, где я должен его разместить, чтобы избежать необходимости вызывать его при каждом обновлении. Точно так же ширина области просмотра изменяется в то же время.

if (GraphicsDevice != null && (GraphicsDevice.Viewport.X != 0 ||
    GraphicsDevice.Viewport.Width != GraphicsDevice.Adapter.CurrentDisplayMode.Width ||
    GraphicsDevice.Viewport.Width != GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width))
  {
    Viewport view = GraphicsDevice.Viewport;
    view.X = 0;
    view.Width = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
    GraphicsDevice.Viewport = view;
  }

Я поместил этот код в метод Update () экрана, и это решает проблему - но, кажется, излишне вызывать его при каждом обновлении , Я также попытался вызвать его в переопределении Activity и Game OnResume () и OnActivate (), он изменяет область просмотра по мере необходимости, но не удерживается и в итоге возвращается к значениям, которые вызывают бары «мгновенно» .

Также стоит отметить, что игра работает в полноэкранном режиме.

Буду признателен за любые советы, которые вы можете предложить.

Игра запущена Игра возобновлена ​​с фона

Примечание: в видео я двигаю синий маркер касанием.

1 Ответ

0 голосов
/ 18 апреля 2020

Для полноты я выкладываю найденное мной решение вопроса здесь. Нашел решение после некоторой помощи в Monogame Community . Я вызвал приведенный ниже метод из события OnWindowFocusChanged () в основной операции.

private void HideSystemUI()
{
// Apparently for Android OS Kitkat and higher, you can set a full screen mode. Why this isn't on by default, or some kind
// of simple switch, is beyond me.
// Got this from the following forum post: http://community.monogame.net/t/blocking-the-menu-bar-from-appearing/1021/2
    if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
    {
        View decorView = Window.DecorView;
        var uiOptions = (int)decorView.SystemUiVisibility;
        var newUiOptions = (int)uiOptions;

        newUiOptions |= (int)SystemUiFlags.LowProfile;
        newUiOptions |= (int)SystemUiFlags.Fullscreen;
        newUiOptions |= (int)SystemUiFlags.HideNavigation;
        newUiOptions |= (int)SystemUiFlags.ImmersiveSticky;

        decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;

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