Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Sprites and Atlases


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 KingofNoobs   Members   -  Reputation: 301

Like
0Likes
Like

Posted 28 November 2012 - 03:34 AM

Hello,

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

I wonder as I wander...

http://www.davesgameoflife.com


Sponsor:

#2 Geoffrey   Members   -  Reputation: 543

Like
1Likes
Like

Posted 28 November 2012 - 10:53 AM

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());
new_sprite->set_cell(cell);

The Trouble With Robots - www.digitalchestnut.com/trouble




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS