无头/ CLI LibGDX

Ben*_*son 7 java libgdx

我正在为一个小型的LibGDX游戏编写服务器端代码,并且偶然发现了一个问题.每当我尝试使用任何Gdx.files.*方法时,我都会遇到一个NullPointerException.

显然这是因为我没有实现ApplicationListener,所以LibGDX还没有被初始化.

有没有办法以无头/ CLI方式初始化LibGDX?我需要能够在服务器端加载TiledMap对象.

MapLoader(Request request)
{
    TiledMap tmp = new TmxMapLoader().load("maps/" + request.name + ".tmx");
}
Run Code Online (Sandbox Code Playgroud)

com.esotericsoftware.kryonet.Server $ 1.received(Server.java:60)at com.tester.Example.server.ExampleServer $ 2.received(MapLoader.java:83)中的线程"Server"java.lang.NullPointerException中的异常com.esotericsoftware.kryonet.Connection.notifyReceived(Connection.java:246)位于com.esotericsoftware.kryonet.Server.update(Server.java:202)的com.esotericsoftware.kryonet.Server.run(Server.java:350)在java.lang.Thread.run(Thread.java:722)

Jyr*_*117 5

我不建议在没有头的环境中使用libGDX,因为它不是设计用于这种方式,并且将来随着libGDX团队更改框架,您可能会遇到问题。但是,正如Rod所指出的那样,完全有可能做到这一点,并且下面是您如何进行的摘要。要初始化Gdx.files全局变量,您将需要在后端程序包中创建一个类并自行设置全局变量:

package com.badlogic.gdx.backends.lwjgl;

import com.badlogic.gdx.Gdx;

public class Headless {
    public static void loadHeadless() {
        LwjglNativesLoader.load();
        Gdx.files = new LwjglFiles();
    }
}
Run Code Online (Sandbox Code Playgroud)

其余的应该很简单。只需调用Headless.loadHeadless(); 首先,您应该能够使用所需框架的各个部分。

如前所述,我不建议这样做,但是我还没有找到将libgdx与客户端/服务器体系结构一起使用的任何好的解决方案。

编辑

不久前(我最初写了这个答案之后),libgdx添加了一个无头后端,该后端就是为此目的而设计的。这是在无头环境中使用libgdx的正确且正确的方法,并且对于使用libgdx创建服务器非常有效。


Tra*_*vis 5

截至2013年12月23日(请求#1018),libGDX具有无头后端,您可以将其用于此目的。