gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:18 26 4
gpt4 key购买 nike

我有一个数据库,用于存储例如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();

如您所见,我正在新线程中创建图像,然后将其传递到主线程。但是 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.

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

最佳答案

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

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

关于java - LibGDX:在另一个线程中创建新的 scene2d 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com