无法在线程中加载tilesmap而不会出现故障(libgdx)

时间:2017-07-10 02:35:41

标签: java android multithreading libgdx

所以,如果我的代码安排如下(在屏幕内):

private TiledMap m = new Tmxloader.load("map");
private OrthogonalTiledMapRenderer renderer = new OrthogonalTiledMapRenderer(m);

public void render(float delta) {

    renderer.setView(cam); 
    renderer.render();

}

它完美无缺。地图已加载,渲染,没有问题。

但是当我把地图加载到线程中以减少加载时间时......

private TiledMap m;
private OrthogonalTiledMapRenderer renderer;
private boolean loaded = false;

new Thread(new Runnable() {
        @Override
        public void run() {
            m = new Tmxloader.load("map");
            loaded = true;
        }
    }).start(); 

if(loaded){
    renderer = new OrthogonalTiledMapRenderer(m);
}

public void render(float delta) {

    renderer.setView(cam); 
    renderer.render();

}

地图渲染错误。事实上,我甚至不会把它称为地图渲染。我只看到一些灰色圆圈。我已经尝试了所有方法,无法找到解决方法。

(这不是我的精确代码,你可能会说我不需要在这里的线程中加载地图,但在我的游戏中我会这样做。相信我。)

1 个答案:

答案 0 :(得分:1)

根据doc

在Libgdx中,只有一个线程(执行app生命周期回调的线程)具有有效的OpenGL上下文,并且可以调用OpenGL调用。您可以从其他线程将Runnable发布到GDX线程,以使其代表其他线程执行内容。发布的runnables将在下一个渲染回调运行之前执行。见Gdx.app.postRunnable()

如果加载时间是问题,那么您应该使用AssetManager来满足您的要求,并在加载所有资源时显示加载屏幕。