SDL_DisplayFormat未在此范围内声明:使用SDL2

时间:2013-07-08 03:24:30

标签: c++ sdl-2

编译器不返回丢失的SDL.h,而是SDL_DisplayFormat未在位于不同标头的类成员函数的范围内声明,即使我在main中初始化它。

SDL_Surface *SpriteLoad::Load(char *File)
{
    SDL_Surface *temp = NULL;
    SDL_Surface *opt = NULL;

    if ((temp = IMG_Load(File)) == NULL)
    {
        return NULL;
    }

    opt = SDL_DisplayFormat(temp);
    SDL_FreeSurface(temp);

    return opt;
}

我的主要通过类和成员函数进入SDL:

int main (int args, char *argc[])
{
    bool quit = false;

    OnRun Game;           // Class that init's SDL
    Window TestWin;

    GlobalTimer fps;
    TestWin.Debug();

我可以使用该类使用SDL_Window创建一个窗口,也可以使用SDL_GetTick。

编辑:用于Sprite :: Load的标题目前是从mercurial repo中提取和构建的SDL,SDL_image,SDL_ttf和SDL_mixer。我不认为这是一个链接错误

2 个答案:

答案 0 :(得分:11)

您收到编译器错误的原因是因为SDL-2.0中不再存在SDL_DisplayFormat

在查看 SDL wiki doc 之后,SDL-1.2中显示的SDL_DisplayFormat已被SDL-2.0中的SDL_ConvertSurfaceFormat取代。

答案 1 :(得分:0)

我会为SDL 2.0重写您的代码;

SDL_Surface *SpriteLoad::Load(SDL_Window *window, char *File)
{
    SDL_Surface *temp = NULL;
    SDL_Surface *opt = NULL;

    if ((temp = IMG_Load(File)) == NULL)
    {
        return NULL;
    }

    // If the window wasn't created yet, just return the texture
    if(window == NULL) return temp;

    opt = SDL_ConvertSurfaceFormat(temp, SDL_GetWindowPixelFormat(window), 0);
    SDL_FreeSurface(temp);

    return opt;
}

在我自己的代码中,如果没有创建窗口,我会返回未经优化的图像(我有时会在窗口之前使用它作为启动画面)。但你可以改变它,以便它自由临时并返回NULL,如果这对你很重要,可能会先发出警告来创建一个窗口。