我正在为一个小型的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)
我不建议在没有头的环境中使用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创建服务器非常有效。
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |