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 に答える