因此,如果我将代码安排成这样(在屏幕内):

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();

}


地图渲染不正确。实际上,这时我什至不称其为地图渲染。我所看到的只是一些灰色圆圈。我已经尝试了所有方法,但找不到解决方法。

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

最佳答案

根据doc

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



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

10-06 03:25
查看更多