【问题标题】:Adding multiple windows in LibGDX?在 LibGDX 中添加多个窗口?
【发布时间】:2015-06-25 14:08:40
【问题描述】:

我想从我的 DekstopLauncher.java 创建多个游戏窗口。 第二个应该能够与第一个交互,例如请求一个字符串。

有可能吗?怎么做?

这是我在 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)

【问题讨论】:

  • 这是创建第一个窗口: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); 编辑:该死,这种评论格式压力很大。
  • 在 cmets 中发布代码压力太大,因为格式 ._。所以我在我的服务器上建立了一个小的 as-basic-as-it-gets html 站点,其中包含行格式和错误日志。 whoplays.lima-city.de/code.html
  • 只需编辑您的原始问题。
  • 完成。抱歉,新的堆栈溢出^^

标签: java graphics libgdx


【解决方案1】:

基本上,您可以在单独的进程中运行每个窗口(使用答案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 的灵感来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 2016-06-25
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多