LibGDX: 在另一个线程中创建新的 scene2d 对象?

LibGDX: Create new scene2d Object inside another thread?

我有一个数据库可以存储例如TextureAtlas 的图像键。因为数据库查询不应该阻塞主线程,查询在另一个线程上执行。

现在我想创建一个 scene2d actor return,这样它就可以显示了。

new Thread() {
        @Override
        public void run() {
            String resultOfQuery = ...;
            final Image image = new Image(atlas.findRegion(resultOfQuery));

            Gdx.app.postRunnable(new Runnable() {
                @Override
                public void run() {
                    listener.onImageCreated(image);
                }
            }); 
        }
    }.start();

如您所见,我正在新线程中创建图像,然后将其传递给主线程。但是 libGDX wiki 声明:

You should never perform multi-threaded operations on anything that is graphics or audio related, e.g. use scene2D components from multiple threads.

我是否必须在主线程上创建 将演员分配到舞台?或者,如果我在另一个线程中创建它,然后将它添加到主线程的舞台上,是否可以?

我在上面看到的唯一潜在问题是在 atlas 上调用 findRegion,这不是线程安全的。但是,如果你知道你的线程不是 运行 而图集正在其他地方使用,那就没问题了。如果您正在进行多个查询,这些查询都可能访问地图集,那么您就会遇到问题。或者,如果您在游戏循环中调用 atlas 方法。

当然,您可以简单地使用无参数 Image 构造函数并将游戏线程可运行区域中的区域传递给它。那么你就没有什么可担心的了。