Java 无头/CLI LibGDX
我正在为一个LibGDX驱动的小游戏编写服务器端代码,并且偶然发现了一个问题。每次我尝试使用任何Java 无头/CLI LibGDX,java,libgdx,Java,Libgdx,我正在为一个LibGDX驱动的小游戏编写服务器端代码,并且偶然发现了一个问题。每次我尝试使用任何Gdx.files.*方法时,都会遇到NullPointerException 显然这是因为我没有实现ApplicationListener,所以LibGDX还没有初始化 有没有办法以headless/CLI方式初始化LibGDX?我需要能够在服务器端加载TileMap对象 MapLoader(Request request) { TiledMap tmp = new TmxMapLoader
Gdx.files.*
方法时,都会遇到NullPointerException
显然这是因为我没有实现ApplicationListener,所以LibGDX还没有初始化
有没有办法以headless/CLI方式初始化LibGDX?我需要能够在服务器端加载TileMap对象
MapLoader(Request request)
{
TiledMap tmp = new TmxMapLoader().load("maps/" + request.name + ".tmx");
}
线程“Server”java.lang.NullPointerException中的异常位于
com.tester.Example.server.ExampleServer$2.received(MapLoader.java:83)
在com.esotericsoftware.kryonet.Server$1.received(Server.java:60)处
com.esotericsoftware.kryonet.Connection.notifyReceived(Connection.java:246)
位于com.esotericsoftware.kryonet.Server.update(Server.java:202)
com.esotericsoftware.kryonet.Server.run(Server.java:350)位于
run(Thread.java:722)
具体来看一下LWJGL后端。LwjglApplication的构造函数初始化所有Gdx.*全局变量,如Gdx.file 如果要从自己的代码调用构造函数中运行的步骤,除了调用initialize(),那么这应该可以满足您的需要。我不建议在无头环境中使用libGDX,它根本不是设计用来这样使用的,将来当libGDX团队更改框架时,您可能会遇到问题。然而,正如罗德所指出的,完全有可能做到这一点,下面是您将如何着手的一个片段。要初始化Gdx.global文件,您需要在后端包中创建一个类,并自行设置globals:
package com.badlogic.gdx.backends.lwjgl;
import com.badlogic.gdx.Gdx;
public class Headless {
public static void loadHeadless() {
LwjglNativesLoader.load();
Gdx.files = new LwjglFiles();
}
}
剩下的应该相当简单。只需调用Headless.loadHeadless();开始时,您应该能够使用所需框架的部分内容
如前所述,我不建议这样做,但我还没有找到任何将libgdx与客户机/服务器体系结构结合使用的好解决方案
编辑:
不久前(在我最初写下这个答案之后),libgdx添加了一个专门为这种目的而设计的。这是在无头环境中使用libgdx的正确方法,对于使用libgdx创建服务器非常有效。截至2013年12月23日(),libgdx有一个可用于此目的的工具。我在无头后端使用TiledMaps时遇到了相关问题。你有没有发现一种在你的服务器上使用地图加载器的方法?