LibGDX управляет несколькими мониторами

#java #scala #libgdx

Вопрос:

Я пытаюсь создать приложение с помощью LibGDX, в котором я хотел бы контролировать, на каком мониторе запускается приложение.

Я нашел небольшой обходной путь, который позволяет мне достичь этого:

 cfg.setMaximized(true)
cfg.setMaximizedMonitor(Lwjgl3ApplicationConfiguration.getMonitors()(1))
  
 

Это откроет приложение в развернутом окне на дополнительном экране. Тем не менее, я хотел бы иметь возможность запускать приложение на дополнительном (или даже третьем мониторе) без его увеличения.

Есть какие-нибудь идеи?

Ответ №1:

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

В LibGDX позиции монитора можно найти с помощью монитора virtualX и virtualY полей. Их размеры можно найти с config.getDisplayMode(Monitor)

Вот, например, я центрирую окно на 2-м мониторе в списке

     int width = 800;
    int height = 600;

    var mon = monitors[1];
    DisplayMode mode = Lwjgl3ApplicationConfiguration.getDisplayMode(mon);
    int posX = mon.virtualX   mode.width/2 - width/2;
    int posY = mon.virtualY   mode.height/2 - height/2;
    
    config.setWindowedMode(width, height);
    config.setWindowPosition(posX, posY);
 

Хотя увеличение окна, вероятно, было бы лучше для пользователя (кто вообще хочет играть в маленьком окне?)