How to create a sprite sheet

How to create a sprite sheet
Last update: More than 3 months ago

How to create a sprite sheet

  • Sprite sheet formats
  • Simple sprite sheet workflow
  • Previewing animations

What is a sprite sheet?

Sprite sheets already exist since the first days of computer games. The idea is to create one big image that contains all animations of a character instead of dealing with many single files.

Types of sprite sheets

Sprite strips and animation strips

An animation strip is the simplest form of a sprite sheet: It's just placing each animation frame next to each other. All frames have the same size, and the animation is aligned in each frame.

A simple sprite strip or animation strip for a game character

Tile sets

It might also contain multiple lines if the animation is longer - or if several animations are combined.

A tile set is not different from a sprite sheet: It contains building blocks for game levels. This is an example for a tile map:

It's easy for a game to retrieve the sprites since they all have the same width and height. The disadvantage is that the sprites waste a lot of memory because of all the additional transparency.

A tile map for a jump and run game.

Optimized sprite sheets

The developers of game engines are aware of the wasted memory in the simple sprite sheets and started to optimize the space. The easiest way is to remove the transparency surrounding the sprite and shrink it to the bounding box.

The even more efficient way is to use polygon outlines to cut the sprites.

Removing obsolete transparency around sprites using a rectangle

Trimming a sprite using its bounding rect

Removing obsolete transparency around sprites using a polygon

Trimming a sprite using a polygon

The game engine now needs additional information to draw the sprite: It needs to know where the sprite is located and how much transparency was removed.

This information can be stored in a data file that is shipped with the sprite sheet. It does not only contain the coordinates but can also contain names for the sprites and other meta information.

With this data file it's much easier to tell the game engine that you want to draw a Banana sprite — instead of paint the sprite at position (299,192).

This is an example of for an optimized sprite sheet, and it's data file might look like:

An optimized sprite sheet
"Apple.png": {
    "frame": {"x":292,"y":304,"w":60,"h":61},
    "rotated": false,
    "trimmed": true,
    "spriteSourceSize": {"x":23,"y":29,"w":60,"h":61},
    "sourceSize": {"w":90,"h":90},
    "pivot": {"x":0.5,"y":0.5}
"Banana.png": {
    "frame": {"x":299,"y":192,"w":99,"h":113},
    "rotated": false,
    "trimmed": true,
    "spriteSourceSize": {"x":14,"y":15,"w":99,"h":113},
    "sourceSize": {"w":128,"h":128},
    "pivot": {"x":0.5,"y":0.5}

Creating a sprite sheet

The easiest way to create optimized sprite sheets is using TexturePacker. TexturePacker is a tool that specializes in creating sprite sheets. The free version allows you to create sprite strips and tile maps.

Download TexturePacker from here — it's available for Windows, macOS and Linux:

How to create a sprite strip

Creating a sprite sheet requires nothing more than dragging your sprites onto TexturePacker:

How to create a sprite sheet with TexturePacker

TexturePacker takes all image files in the folder and packs the sheet for you. It supports a big range of image formats including PhotoShop's psd files and even Flash movies (.swf).

When you are using the free version, you'll have to change 3 options from the default values. This is no restriction because you need them set to create a sprite strip:

  • Algorithm: Basic
  • Trim mode: None
  • Png Opt Level: 0 (that's on the Advanced Settings)

Press the Publish button - and you are done.

How to create an optimized sprite sheet

Sprite strips are a good start — but also a waste of memory in many cases. If you plan to create a game, you should optimize the sprite sheet.

The first thing is to select the game engine you plan to use. TexturePacker supports 30+ engines and can be extended to support any new one.

Click the Data Format button in the settings. Select the engine you plan to use from the dropdown:

TexturePacker automatically applies optimized default settings for the game engine. It also writes a data file with the required sprite information when you press Publish.

Visit our tutorial section for detailed instructions how to use the sprite sheets for games.