Я хочу сохранить все мои переменные SDL_Surface в массиве и удерживать этот массив в классе. Причина в том, что я хочу иметь возможность перезагрузить все SDL_Surfaces на основе событий.
Я думаю, что это должно быть что-то вроде этого, я, вероятно, ошибаюсь:
class Imgs_Arr{
private:
int pos;
public:
// DECLARE THE ARRAY
Imgs_Arr();
void addItem(char * path);
void changeItem(int pos);
};
Imgs_Arr::Imgs_Arr(){
// CREATE ARRAY
}
void Imgs_Arr::addItem(char * path){ // ADD ITEM IN LAST ARRAY POSITION
vec[pos] = load_image(path);
if( vec[pos] == NULL ) exit(5);
pos++;
}
void Imgs_Arr::changeItem(int p){ // ADD ITEM IN LAST ARRAY POSITION
vec[p] = load_image(path);
if( vec[p] == NULL ) exit(5);
}
Я ищу пример того, как это сделать. Но любая информация будет полезна. благодаря
Ваша проблема несколько специфична, поскольку SDL_Surface*
- непрозрачный дескриптор. Вы не должны знать фактический объект SDL_Surface
который он указывает. Итак, вам нужен динамический массив непрозрачных ручек. Для основного массива мы просто используем std::vector
, поэтому я бы сделал это следующим образом:
#include <memory>
#include <vector>
#include <SDL.h>
class Arr_Images
{
using sdl_handle = std::unique_ptr<SDL_Surface, void(*)(SDL_Surface*)>;
sdl_handle wrap_unique_surface(SDL_Surface * s)
{
return sdl_handle(s, SDL_FreeSurface);
}
std::vector<sdl_handle> surfaces;
public:
void addImg(char const * path)
{
if (SDL_Surface * p = load_image(path))
{
surfaces.push_back(wrap_unique_surface(p));
}
else
{
// failed to load
}
}
};
surfaces[3].reset(q);
гдеq
- еще один необработанныйSDL_Surface *
.