繁体   English   中英

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

[英]LibGDX: Create new scene2d Object inside another thread?

我有一个数据库,该数据库存储例如TextureAtlas的图像密钥 由于数据库查询不应阻塞主线程,因此该查询将在另一个线程上执行。

现在,我想创建一个scene2d actor并返回它,以便可以显示它。

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

如您所见,我正在新线程中创建Image,然后将其传递给主线程。 但是libGDX Wiki指出:

绝对不要对与图形或音频有关的任何事物执行多线程操作,例如,使用来自多个线程的scene2D组件。

我是否必须在主线程上创建角色并将其分配给舞台? 还是可以的,如果我在另一个线程中创建它,然后将其添加到主线程的阶段中?

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

当然,您可以简单地使用无参数Image构造函数,并将其传递给可运行游戏线程中的一个区域。 这样您就不用担心了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM