Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411468 Posts in 69368 Topics- by 58422 Members - Latest Member: daffodil_dev

April 22, 2024, 10:15:33 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityTownhallForum IssuesArchived subforums (read only)TutorialsA sprite sheet in SDL2
Pages: [1]
Print
Author Topic: A sprite sheet in SDL2  (Read 2943 times)
soryy708
Level 3
***


View Profile WWW
« on: October 31, 2013, 10:53:22 PM »

So you know some basic SDL but want to do something actually productive? Sprite sheets are awesome! Let's make some.

Code!
Code:
namespace Video
{
    class Sprite
    {
    private:
        SDL_Texture* texture;
        SDL_Rect     rect;

    public:
        SDL_Texture* getTexture() const { return texture; }
        SDL_Rect     getRect()    const { return rect;    }

        Sprite(SDL_Texture* texture, SDL_Rect rect) :
                texture(texture),
                rect(rect)
        {
        }
    };

    class SpriteSheet
    {
    private:
        std::shared_ptr<SDL_Texture> texture;
        int sprite_w;
        int sprite_h;

    public:
        Sprite getSprite(const int number)
        {
            int texture_w;
            int texture_h;
            SDL_QueryTexture(texture.get(), nullptr, nullptr, &texture_w, &texture_h);

            SDL_Rect rect;
            rect.w = sprite_w;
            rect.h = sprite_h;
            rect.x = sprite_w * number;
            rect.y = 0;
            while (rect.x + sprite_w > texture_w)
            {
                rect.y += sprite_h;
                rect.x -= texture_w;
            }
            rect.y = rect.y % texture_h;

            return Sprite(texture.get(), rect);
        }

        SpriteSheet(SDL_Renderer* renderer, SDL_Surface* surface, const int sprite_w, const int sprite_h) :
                sprite_w(sprite_w),
                sprite_h(sprite_h)
        {
            texture = std::shared_ptr<SDL_Texture>(SDL_CreateTextureFromSurface(renderer, surface), SDL_DestroyTexture);
            if (texture.get() == nullptr)
            {
                throw(std::exception(SDL_GetError()));
            }
        }
    };
}
« Last Edit: December 09, 2013, 02:42:20 AM by soryy708 » Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic