我想将所有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);
}
我正在寻找一个如何做到这一点的例子。但任何信息都会有用。感谢
答案 0 :(得分:0)
您的问题有点具体,因为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
}
}
};