[英]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.