Jump to content
  • Advertisement
Sign in to follow this  

Sprites and Atlases

This topic is 2204 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


I use the following structure for loading instanced and atlased sprites in my game: I load up a file called an "atlas" which contains metadata on all sprites and animations in the atlas. When I want to display a sprite onscreen or give an entity a sprite, I use a class called "SpriteInstance" which adds a destination rectangle (screen rect) for the sprite and an animation frame, but uses the underlying Sprite which is found in the SpriteList in the atlas. So, 1 atlas, many sprites, and (potentially) many more sprite insatnces. The only problem I'm having now is how to refernce the "parent" sprite and the starting animation when creating a SpriteInstance. My constructor is as follows:

SpriteInstance(Sprite * parent, float x, float y, float scaleX, float scaleY, std::wstring startingAnimation)

I tried using the wstring to do some hashing or whatnot, but I am quite confused on that subject. I also just used the raw Sprite pointer, and I will have to do something like this:

auto IsLevel1Atlas = [](std::unique_ptr<Atlas> atlas) -> bool { return atlas->GetName() == L"Level1Atlas"; };
#define &(std::find_if(mAtlasList.begin(), mAtlasList.end(), IsLevel1Atlas)->get()->GetSpriteList().find(L"Background")->second) SpritePtr
mSpriteInstanceList.push_back(SpriteInstance(SpritePtr, 0, 0, INTENDED_SCREEN_WIDTH, INTENDED_SCREEN_HEIGHT, startinganimation);

Which doesn't compile by the way. Is there a better way?

Thanks in advance.

-Dave Ottley

Share this post

Link to post
Share on other sites
The system I use has what you call animation frames as objects in their own right (I call them cells). There is a function to find one by name, and after that you can pass around a pointer to it just like you do with the parent in your example. In fact, the cell knows it's parent so you don't need to pass that around separately. So my code to create an instance looks something like this:

cell = cell_manager.lookup_cell("example_cell_name");

new_sprite = std::auto_ptr<dx_sprite>(new dx_sprite());

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!