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