java - 无法在线程内加载平铺 map 而不出现故障(libgdx)

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

}

它工作得很好。 map 已加载、渲染,没有问题。

但是当我将 map 的加载放在线程中以减少加载时间时......

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

}

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

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

最佳答案

根据doc :

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

<小时/>

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

关于java - 无法在线程内加载平铺 map 而不出现故障(libgdx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003020/

相关文章:

java - mod_rewrite、RewriteMap、RewriteLock 和线程

java - 我可以构造一个具有毫秒分辨率的 jodatime.Duration 对象吗?

java - 如何使用 Struts 将一个简单的字符串从 Action 获取到 JSP?

android - Android Studio 中的模拟器启动但未打开

android - [错误 : Failed to find 'ANDROID_HOME' environment variable. 尝试手动设置

java - 将线程注册到 Phaser

java - 如何在 JSP 中显示动态生成的 svg 图像(使用 Spring MVC)?

java - 如何在 Android 版 Flutter 中渲染 OpenGL?

android - 如何将 View 放在确定的像素/位置

ios - 主队列上的调度屏障