Java Can';t在线程内加载平铺贴图而不出现毛刺(libgdx)

Java Can';t在线程内加载平铺贴图而不出现毛刺(libgdx),java,android,multithreading,libgdx,Java,Android,Multithreading,Libgdx,因此,如果我将代码按如下方式排列(在屏幕内): 它工作得非常好。地图已加载、渲染,没有问题 但是当我把地图加载到线程中以减少加载时间时 private TiledMap m; private OrthogonalTiledMapRenderer renderer; private boolean loaded = false; new Thread(new Runnable() { @Override public void run() {

因此,如果我将代码按如下方式排列(在屏幕内):

它工作得非常好。地图已加载、渲染,没有问题

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

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

}
地图渲染不正确。事实上,在这一点上,我甚至不会称之为地图渲染。我只看到一些灰色的圆圈。我什么都试过了,却找不到解决办法

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

根据:

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


如果加载时间是个问题,那么您应该根据自己的需求使用,并在加载所有资源时显示加载屏幕

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

}