Fix sprites

This commit is contained in:
Reimar 2025-10-31 12:37:37 +01:00
parent b2f888b55f
commit 37d7c962b8
4 changed files with 10 additions and 15 deletions

View File

@ -42,16 +42,16 @@ GameRenderer::~GameRenderer()
std::unique_ptr<Sprite> GameRenderer::load_sprite(const std::string &file, const int width, const int height) const std::unique_ptr<Sprite> GameRenderer::load_sprite(const std::string &file, const int width, const int height) const
{ {
return std::make_unique<Sprite>(Sprite({ renderer, file, width, height })); return std::make_unique<Sprite>(renderer, file, width, height);
} }
void GameRenderer::draw_sprite(const Sprite sprite, const int x, const int y) const void GameRenderer::draw_sprite(const Sprite &sprite, const int x, const int y) const
{ {
const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height }; const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height };
SDL_RenderCopy(renderer, sprite.texture, nullptr, &rect); SDL_RenderCopy(renderer, sprite.texture, nullptr, &rect);
} }
void GameRenderer::draw_sprite_rotated(const Sprite sprite, const int x, const int y, const double angle) const void GameRenderer::draw_sprite_rotated(const Sprite &sprite, const int x, const int y, const double angle) const
{ {
const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height }; const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height };
SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, angle, nullptr, SDL_FLIP_NONE); SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, angle, nullptr, SDL_FLIP_NONE);

View File

@ -24,9 +24,9 @@ public:
std::unique_ptr<Sprite> load_sprite(const std::string &file, int width, int height) const; std::unique_ptr<Sprite> load_sprite(const std::string &file, int width, int height) const;
void draw_sprite(Sprite sprite, int x, int y) const; void draw_sprite(const Sprite &sprite, int x, int y) const;
void draw_sprite_rotated(Sprite sprite, int x, int y, double angle) const; void draw_sprite_rotated(const Sprite &sprite, int x, int y, double angle) const;
void clear_screen(uint8_t r, uint8_t g, uint8_t b, uint8_t a) const; void clear_screen(uint8_t r, uint8_t g, uint8_t b, uint8_t a) const;

View File

@ -2,22 +2,13 @@
#include <SDL2/SDL_image.h> #include <SDL2/SDL_image.h>
#include "Sprite.hpp" #include "Sprite.hpp"
#include <iostream> #include <iostream>
#include <execinfo.h>
#include <unistd.h>
Sprite::Sprite(SDL_Renderer *renderer, const std::string &file, int width, int height) : width(width), height(height) Sprite::Sprite(SDL_Renderer *renderer, const std::string &file, int width, int height) : width(width), height(height)
{ {
texture = IMG_LoadTexture(renderer, file.c_str()); texture = IMG_LoadTexture(renderer, file.c_str());
this->file = std::string(file);
} }
Sprite::~Sprite() Sprite::~Sprite()
{ {
std::cout << "destruct " << file << std::endl;
void *array[10];
size_t size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
SDL_DestroyTexture(texture); SDL_DestroyTexture(texture);
} }

View File

@ -9,11 +9,15 @@ public:
SDL_Texture *texture; SDL_Texture *texture;
int width; int width;
int height; int height;
std::string file;
Sprite(SDL_Renderer *renderer, const std::string &file, int width, int height); Sprite(SDL_Renderer *renderer, const std::string &file, int width, int height);
~Sprite(); ~Sprite();
Sprite(const Sprite&) = delete;
Sprite operator=(const Sprite&) = delete;
Sprite(Sprite&&) = delete;
Sprite operator=(Sprite&&) = delete;
}; };
#endif #endif