1

我想将所有 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);
}

我正在寻找如何做到这一点的例子。但是任何信息都是有用的。谢谢

4

1 回答 1

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
        }
    }
};
于 2013-10-05T22:14:21.857 回答