我有一个存储例如数据库的数据库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组件。
我是否必须创建和将actor分配给主线程上的舞台?或者它是否可以,如果我在另一个线程中创建它然后将它添加到主线程的舞台上?
答案 0 :(得分:0)
我上面看到的唯一潜在问题是在地图册上调用findRegion,这不是线程安全的。但是如果你知道你的线程没有运行,而地图集正在其他地方使用它就没问题了。如果您有多个查询可能都可能访问图集,那么您就会遇到问题。或者,如果您在游戏循环中调用atlas方法。
当然,你可以简单地使用无参数的Image构造函数,并在游戏线程runnable中传递一个区域。那你就没什么好担心的了。