我遇到了SDL_image库的问题。我写了一个简单的程序加载spritesheet并在左键单击动画。这是代码:
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
const int sw=800;
const int sh=450;
int main(){
SDL_Init(SDL_INIT_EVERYTHING);
IMG_Init(IMG_INIT_PNG);
bool quit=false;
bool shoot=false;
SDL_Event event;
Uint32 time;
unsigned char frame=0;
SDL_Window* window = SDL_CreateWindow("Sprite",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,sw,sh,0);
SDL_Renderer* render = SDL_CreateRenderer(window,-1,0);
SDL_Surface* image = IMG_Load("p_pt_12.png");
printf("IMG_Load: %s\n", IMG_GetError());
SDL_Texture* texture = SDL_CreateTextureFromSurface(render, image);
while(!quit){
if(shoot){
time=SDL_GetTicks();
time/=(750/5);
frame=time%5;
if(frame==4){
frame = 0;
shoot=false;
}
}
SDL_Rect srcrect = { frame*96,0,96,96};
SDL_Rect dstrect = { (sw-96)/2, (sh-96)/2, 96, 96 };
SDL_PollEvent(&event);
switch (event.type){
case SDL_QUIT:
quit = true;
break;
case SDL_MOUSEBUTTONDOWN:
if(event.button.button == SDL_BUTTON_LEFT) shoot = true;
break;
}
SDL_RenderClear(render);
SDL_RenderCopy(render, texture,&srcrect,&dstrect);
SDL_RenderPresent(render);
}
SDL_DestroyTexture(texture);
SDL_FreeSurface(image);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
return 0;
}
问题是当我尝试运行它时,IMG_Load()返回NULL指针,IMG_GetError()显示“不支持的文件格式”。 spritesheet是一个.png文件,但.jpg spritesheet也是如此。我敢肯定,代码是正确的,因为它可以在其他设备上使用完全相同的图像文件,如魅力。我已经尝试重新安装SDL和SDL_image,但它不起作用。 SDL_RWops和IMG_LoadPNG_RW也没有帮助。我在64位Linux Mint上使用Eclipse Kepler SR2(但我也尝试使用Code :: Blocks 12.11运行它,结果相同)。
感谢任何帮助,谢谢!
答案 0 :(得分:2)
您的代码是正确的,适合我。可能你的系统缺少sdl_image处理图像所需的一些库,例如libpng和zlib。安装它们,让我们知道它是否有效。