assets-raw/ ui/ buttons/ backgrounds/ characters/ player/ enemy/ Every folder you point TexturePacker at becomes one "Atlas" (one .atlas file + one .png ). Step 3: Running the Packer (The LibGDX Way) Inside your LibGDX project (usually in your core module or a standalone desktop launcher), write a small one-off packing script.
But simply using SpriteBatch isn't enough. If you’re feeding it 100 individual PNG files, you’re leaving massive performance gains on the table. The secret weapon of every high-performance LibGDX game is .
// Instead of loading 100 textures... TextureAtlas gameAtlas = new TextureAtlas(Gdx.files.internal("ui/ui-atlas.atlas")); // Grab a single region TextureRegion buttonRegion = gameAtlas.findRegion("green_button_01"); texturepacker libgdx
Set up your assets like this:
// Before Texture playerTex = new Texture("player.png"); // After (no logic change needed in your entity class) TextureRegion playerTex = gameAtlas.findRegion("player"); 1. 9-Patch (Scalable UI) Name your raw files with .9 (e.g., panel.9.png ). In TexturePacker GUI, enable StripWhitespace and Ignore blanks . LibGDX will automatically load them as NinePatch objects. 2. Pixel Perfect (Retro Games) If you make pixel art, turn off filtering (set to Nearest ) and turn on edgePadding = false to prevent bleeding between sprites. 3. Debug Visualization LibGDX has a built-in debugger for atlases. Render this to see if your packing is efficient (red = empty space): If you’re feeding it 100 individual PNG files,
Run this every time you change your art. Put it in a Gradle task so you never forget. Step 4: Loading the Atlas in LibGDX Once packed, you get two files: ui-atlas.atlas and ui-atlas.png . Copy these to your Android/assets folder.
public class AtlasPacker public static void main(String[] args) // Settings TexturePacker.Settings settings = new TexturePacker.Settings(); settings.maxWidth = 2048; settings.maxHeight = 2048; settings.pot = true; // Power of two (required for legacy devices) settings.filterMin = TextureFilter.Nearest; settings.filterMag = TextureFilter.Nearest; // Input: raw images, Output: folder for assets TexturePacker.process(settings, "../raw-assets/ui", "../android/assets/ui", "ui-atlas"); System.out.println("Packing complete!"); TextureAtlas gameAtlas = new TextureAtlas(Gdx
Now, load them in your game: