1
當使用TextureAtlas創建Sprite和createSprite方法時,LibGDX文檔說:此方法使用字符串比較來查找區域並構造一個新的Sprite,因此應緩存結果而不是多次調用此方法。如何緩存TextureAtlas結果?
如何緩存這些結果?它只是一個我創建來存儲創建的精靈的變量嗎?如果是這樣,那麼我如何創建相同精靈的不同副本?
當使用TextureAtlas創建Sprite和createSprite方法時,LibGDX文檔說:此方法使用字符串比較來查找區域並構造一個新的Sprite,因此應緩存結果而不是多次調用此方法。如何緩存TextureAtlas結果?
如何緩存這些結果?它只是一個我創建來存儲創建的精靈的變量嗎?如果是這樣,那麼我如何創建相同精靈的不同副本?
每次使用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
,這將會帶來良好的性能,因爲當您渲染時,圖形卡上不會有太多的紋理開關青蛙。
感謝您的解釋!你完美地回答了我的問題。 –
@noone只是好奇,將紋理區域發送到青蛙而不是整個地圖集不是更好嗎?或者這沒有什麼區別? –
@ MrCharli3不,這沒有什麼區別,因爲它只是提及地圖集,而不是地圖集本身。對圖集的引用和對紋理的引用都只是4個字節。 – noone