簡體   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