2014-12-05 3 views

ответ

3

Я думаю, что вы обычно не загружаете Sprite напрямую, но вы загружаете его Texture и создаете из него Sprite.
Итак, вы вызываете assets.load("file", Texture.class), а затем создайте Sprite с загруженным вами Texture:
Sprite sprite = new Sprite(asstes.get("file", Texture.class)).

Но я предлагаю вам использовать TextureAtlas вместо Texture.
A TextureAtlas - это своего рода «Коллекция текстур», это, в основном, большой Texture, в котором есть все единственное Texture s.
Вы можете загрузить его, используя assets.load("atlas", TextureAtlas.class)
и получите его, используя: TextureAtlas atlas = assets.get("atlas", TextureAtlas.class).
Вы можете создать свой Sprite так:
Sprite sprite = atlas.createSprite("spriteName");

Чтобы создать TextureAtlas можно использовать TexturePacker.

1

Не рекомендуется напрямую загружать спрайт. Когда на Android происходит потеря контекста, он освобождает память, занятую вашими загруженными активами. Поэтому прямой доступ к вашим активам после потери контекста немедленно приведет к краху возобновленного приложения.

Чтобы предотвратить вышеуказанную проблему, вы должны использовать AssetManager, который загружает и хранит такие активы, как текстуры, растровые изображения, карты плитки, звуки, музыку и т. Д. Используя AssetManager, вам придется загружать каждый актив только один раз.

рекомендуем способ сделать это состоит в следующем:

// load texture atlas 
final String spriteSheet = "images/spritesheet.pack"; 
assetManager.load(spriteSheet, TextureAtlas.class); 
// blocks until all assets are loaded 
assetManager.finishedLoading(); 
// all assets are loaded, we can now create our TextureAtlas object 
TextureAtlas atlas = assetManager.get(spriteSheet); 

// (optional) enable texture filtering for pixel smoothing 
for (Texture t: atlas.getTextures()) 
    t.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

// Create AtlasRegion instance according the given <atlasRegionName> 
final String atlasRegionName = "regionName"; 
AtlasRegion atlasRegion = atlas.findRegion(atlasRegionName); 

// adjust your sprite position and dimensions here 
final float xPos = 0; 
final float yPos = 0; 
final float w = asset.getWidth(); 
final float h = asset.getHeight(); 

// create sprite from given <atlasRegion>, with given dimensions <w> and <h> 
// on the position of the given coordinates <xPos> and <yPos> 
Sprite spr = new Sprite(atlasRegion, w, h, xPos, yPos); 
+1

Вместо того, чтобы создать новый 'Sprite' из' AtlasRegion' можно непосредственно создающих его из '' TextureAtlas' с atlas.createSprite (spritename) '. Также «TextureFilter» может быть установлен в конфигурации «TexturePacker», поэтому он настроен на весь «TextureAtlas». – Springrbua

+0

Этот ответ не совсем корректен. Текстуры в libgdx автоматически * управляются * с или без AssetManager и поэтому автоматически перезагружаются после потери контекста. – Tenfour04

+0

В libgdx вы можете иметь управляемые и неуправляемые текстуры. Следовательно, вы действительно можете избежать использования AssetManager, обеспечив автоматическое управление текстурами. Это тот случай, когда текстуры загружаются из FileHandle, но вы должны перезагрузить их вручную в 'resume()' и, возможно, в 'resize()', также если они были загружены из Pixmap. Чтобы избежать этой головной боли, я бы рекомендовал использовать «AssetManager». – Gio

Смежные вопросы