The JSON Array based atlases are supported by LittleKt. Whether it is published by Code & Web’s texture packer or LittleKt’s own texture packer implementation, or whatever else that supports the format.
LittleKt can read and load multi-packed atlases just as easily as a single based atlas using a TextureAtlas.
TextureAtlas
We can load a TextureAtlas
from a VfsFile
:
val atlas: TextureAtlas = resourcesVfs["tiles.atlas.json"].readAtlas()
We can access specific a specfic TextureAtlas.Entry within the atlas by either using the get operator
for an exact match or getByPrefix
to grab the first entry that matches the specified prefix. This is great for grabbing the first frame of an animation. An entry
contains references to the the Texture
and TextureSlice
which can be for rendering.
val atlas: TextureAtlas = resourcesVfs["tiles.atlas.json"].readAtlas()
val diamond: TextureAtlas.Entry = atlas["diamond"]
val hero: TextureAtlas.Entry = atlas.getByPrefix("heroRun")
Using a TextureAtlas.Entry
val hero: TextureAtlas.Entry = atlas.getByPrefix("heroRun")
batch.use(renderPass)
it.draw(hero.slice, 5f, 5f)
}
Loading a multi-packed atlas
If we have an atlas that is split into multiple atlas files and images - we can load them the exact same way as we would an atlas with a single JSON and image file:
// assuming with have files: tiles.atlas-0.json, tiles.atlas-1.json, etc..
// we can load either one as long the other files are referenced in the file
val atlas: TextureAtlas = resourcesVfs["tiles.atlas-0.json"].readAtlas()
The atlas parser and loader will read the related_multi_packs
field under the meta
tag in the JSOn file and will parse and load them as well all in one go. The entries are then sorted by alpha-numeric filenames (file1.png, file2.png, … file9.png, file10.png) so animations can stay intact.
Create animations
We can create an animation directly from a TextureAtlas
by using the prefix of the names of the sprites within the atlas. See the Animations for more info on using animations.
val atlas: TextureAtlas = resourcesVfs["tiles.atlas.json"].readAtlas()
val heroRun: Animation<TextureSlice> = atlas.getAnimation("heroRun")