Jump to content
  • Advertisement
Sign in to follow this  

Sprite Sheets

This topic is 5447 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Ive been writing a sprite engine recently, it all works quite well apart from one issue I have run into. The "cells" are selected from a sprite sheet but the problem is the sprite alignment, because you specify each cell and it has varied width and height its next to impossible to get them to align properly.. Any advice? Regards. Ash.Eh?

Share this post

Link to post
Share on other sites
Yeah either redo the sprite sheet so it's a uniform width/height, or figure out how to load each individual size difference.

Or you might write an algorithm that traces the lines (assuming there's, say, a blue line surrounding each cell) and figures out the width/heights based on that.

Share this post

Link to post
Share on other sites
I'm using an XML variant to store my texture files. I usually use 1 sheet for each sprite type. So I have 1 ship sheet, 1 for weapons, other for objects, etc.

Next, I make a XML file to store all the filenames, widths, heights, sprites per row, etc. and use PML to parse the files.

My current texture file looks like this:

<texture name="images/rocks_big.bmp" width="64" height="64" row="2" rotx="32" roty="32"/>
<texture name="images/rocks_medium.bmp" width="32" height="32" row="2" rotx="16" roty="16"/>
<texture name="images/rocks_small.bmp" width="16" height="16" row="2" rotx="8" roty="8"/>
<texture name="images/ship.bmp" width="32" height="32" row="1" rotx="32" roty="32"/>
<texture name="images/starfield.bmp" width="256" height="256" row="1"/>
<texture name="images/sun.bmp" width="128" height="128" row="1"/>
<texture name="images/vortex.bmp" width="128" height="128" row="1"/>
<texture name="images/nebula.bmp" width="128" height="128" row="1"/>
<texture name="images/bullet.bmp" width="16" height="16" row="1"/>

Next, I load and parse the file and preload all my textures. You could do a similar thing, however, you just make your sprite pack XML file look like:

<spritesheet name="sheet1.bmp">
<sprite name="some name" x="10" y="10" width="64" height="64" />
<sprite name="other name" x="10" y="10" width="64" height="64" />
<spritesheet name="sheet2.bmp">
<sprite name="yet another name" x="10" y="10" width="64" height="64" />
<sprite name="name different" x="10" y="10" width="64" height="64" />

Repeat all the sprite tags for all your sprites. Give them a unique name and store them somewhere in memory. When you need a sprite, you just refer to it using it's unique name(Or hash the name to speed things up).

As for the parser, I use PML to do the grunt work. It's pretty easy to use. So, to load the sprites, you should use something along the lines of this:

PML PmlSpritepack("textures.pml");

for (int nTeller = 0; nTeller < PmlSpritepack.GetTagCount(); ++nTeller)
// Get the <spritesheet> tag
PML PmlSheet = PmlSpritepack.GetTag(nTeller);

// Now loop through the entire list
for (int nCounter = 0; nCounter < PmlSheet.GetTagCount(); ++nCounter)
PML PmlTag = PmlSheet.GetTag(nCounter);
std::string strType = PmlTag.GetName();

// if strType is "sprite" we have a sprite definition
if (strType == "sprite")
std::string strID = PmlTag.GetParameter("name", ""); // 2nd param is default value
int x = atoi(PmlTag.GetParameter("x", "-1"));
int y = atoi(PmlTag.GetParameter("y", "-1"));
// Etc.

// Place the data into the sprite managing object or something

If you go with PML, include all the files into your project, and #include "PML.hpp" into the files that require it. The above code should work, although not tested.


Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!