使用资产管理器LibGDX加载精灵

时间:2014-12-05 09:22:09

标签: libgdx sprite assets

如何使用.assets.load(" file",file.type)加载精灵,在这种情况下,精灵的文件类型应该是什么?

2 个答案:

答案 0 :(得分:3)

我想,您通常不会直接加载Sprite,但是加载它Texture并从中创建Sprite
因此,您拨打assets.load("file", Texture.class),然后在加载Sprite时创建Texture
Sprite sprite = new Sprite(asstes.get("file", Texture.class))

但我建议您使用TextureAtlas代替Texture TextureAtlas是某种"纹理集合",它基本上是一个大的Texture,其中包含所有单Texture个。 您可以使用assets.load("atlas", TextureAtlas.class)加载它 并使用: TextureAtlas atlas = assets.get("atlas", TextureAtlas.class)
然后,您可以像这样创建Sprite
Sprite sprite = atlas.createSprite("spriteName");

要创建TextureAtlas,您可以使用TexturePacker

答案 1 :(得分: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);