编译器不返回丢失的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。我不认为这是一个链接错误答案 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,如果这对你很重要,可能会先发出警告来创建一个窗口。