2014-05-11 80 views
1

當使用TextureAtlas創建Sprite和createSprite方法時,LibGDX文檔說:此方法使用字符串比較來查找區域並構造一個新的Sprite,因此應緩存結果而不是多次調用此方法。如何緩存TextureAtlas結果?

如何緩存這些結果?它只是一個我創建來存儲創建的精靈的變量嗎?如果是這樣,那麼我如何創建相同精靈的不同副本?

回答

1

每次使用createSprite方法時,都會創建一個新的Sprite。例如,每個敵人通常會有一個精靈。假設你有一個類Frog這是你的敵人之一。它應該是這樣的(僞代碼):

public class Frog { 
    private Sprite sprite; 

    public Frog(TextureAtlas atlas) { 
     sprite = atlas.createSprite("frog"); 
    } 

    public void update(float deltaTime) { 
     // update the sprite position 
    } 

    public void render(Batch batch) { 
     sprite.draw(batch); 
    } 
} 

現在每個Frog將有自己的Sprite。這是必要的,因爲所有的青蛙都可以在不同的地方。該位置將通過Sprite配置。您將在構造函數中僅創建一次精靈,並且所有這些精靈共享同一TextureAtlas的相同TextureRegion,這將會帶來良好的性能,因爲當您渲染時,圖形卡上不會有太多的紋理開關青蛙。

+0

感謝您的解釋!你完美地回答了我的問題。 –

+0

@noone只是好奇,將紋理區域發送到青蛙而不是整個地圖集不是更好嗎?或者這沒有什麼區別? –

+1

@ MrCharli3不,這沒有什麼區別,因爲它只是提及地圖集,而不是地圖集本身。對圖集的引用和對紋理的引用都只是4個字節。 – noone