2015-06-25 2 views
2

Я хочу создать несколько окон игры из моего DekstopLauncher.java. Второй должен иметь возможность взаимодействовать с первым, например, запрашивать строку.Добавление нескольких окон в LibGDX?

Можно ли это сделать? И как?

Это то, что я пытался в классе DeskopLauncher:

Это создает первое окно:

LwjglApplicationConfiguration configForTiles = new LwjglApplicationConfiguration(); 
TilePresets tilesWindow = new TilePresets(); 
LwjglApplication tiles = new LwjglApplication(tilesWindow, configForTiles); 

И это вторая

LwjglApplicationConfiguration configForMap = new LwjglApplicationConfiguration(); 
MapMaker mapWindow = new MapMaker(); 
LwjglApplication map = new LwjglApplication(mapWindow, configForMap); 

Создание только один работает. Но если добавить и это дает мне эту ошибку:

LwjglApplication: Couldn't initialize audio, disabling audio 
java.lang.IllegalStateException: Only one OpenAL context may be instantiated at any one time. 
at org.lwjgl.openal.AL.create(AL.java:113) 
at org.lwjgl.openal.AL.create(AL.java:102) 
at org.lwjgl.openal.AL.create(AL.java:206) 
at com.badlogic.gdx.backends.lwjgl.audio.OpenALAudio.(OpenALAudio.java:72) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.(LwjglApplication.java:83) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.(LwjglApplication.java:64) 
at com.whoplays.mapmaker.desktop.DesktopLauncher.main(DesktopLauncher.java:16) 
Exception in thread "LWJGL Application" java.lang.IllegalStateException: From thread Thread[LWJGL Application,5,main]: Thread[LWJGL Application,5,main] already has the context current at org.lwjgl.opengl.ContextGL.checkAccess(ContextGL.java:184) 
at org.lwjgl.opengl.ContextGL.forceDestroy(ContextGL.java:241) 
at org.lwjgl.opengl.DrawableGL.destroy(DrawableGL.java:130) 
at org.lwjgl.opengl.Display$5.destroy(Display.java:834) 
at org.lwjgl.opengl.Display.destroy(Display.java:1095) 
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.createDisplayPixelFormat(LwjglGraphics.java:197) 
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setupDisplay(LwjglGraphics.java:174) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:138) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120) 
+0

Это создает первое окно: 'LwjglApplicationConfiguration configForTiles = new LwjglApplicationConfiguration(); TilePresets tilesWindow = new TilePresets(); LwjglApplication tiles = new LwjglApplication (tilesWindow, configForTiles); ' И это второе ' LwjglApplicationConfiguration configForMap = new LwjglApplicationConfiguration(); MapMaker mapWindow = новый MapMaker(); LwjglApplication map = new LwjglApplication (mapWindow, configForMap); ' EDIT: DAMN это форматирование комментариев является напряженным. – WhoPlays

+0

Проводка кода в комментариях слишком стрессовая из-за форматирования ._. Итак, я установил небольшой сайт as-basic-as-it-gets html на моем сервере с форматированием строки и журналом ошибок. http://whoplays.lima-city.de/code.html – WhoPlays

+1

Просто отредактируйте исходный вопрос. – Tenfour04

ответ

2

В принципе, вы можете запустить каждое окно в отдельном процессе (используйте ответ here, чтобы увидеть, как реализовать JavaProcess, который используется ниже):

public class Tiles { 
    public static void main(String[] args) { 
     LwjglApplicationConfiguration configForTiles = new LwjglApplicationConfiguration(); 
     TilePresets tilesWindow = new TilePresets(); 
     LwjglApplication tiles = new LwjglApplication(tilesWindow, configForTiles); 
    } 
} 

Wrapper.java является главной точкой входа. Это место, где запуск оба окна происходит:

public class Wrapper { 
    public static void main(String[] args) { 
     // Launch mapWindow regularly 
     LwjglApplicationConfiguration configForMap = new LwjglApplicationConfiguration(); 
     MapMaker mapWindow = new MapMaker(); 
     LwjglApplication map = new LwjglApplication(mapWindow, configForMap); 

     try { 
     int res = JavaProcess.exec(Tiles.class); // Where the second window is shown 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 
    } 
} 

Кредит начеку! У меня был аналогичный вопрос, и я нашел это решение где-то, но не могу вспомнить, где. Я отправлю источник здесь, когда найду его.

Редактировать: Кредит принадлежит человеку, у которого у меня есть идея для этого solution.

Смежные вопросы