我使用SDL库进行游戏,并且精灵背景有问题。
我有这个加载图像的功能:
SDL_Surface *loadImage(std::string path) {
SDL_Surface *image = NULL;
SDL_Surface *optimizedImage = NULL;
image = IMG_Load(path.c_str());
if (image) {
optimizedImage = SDL_DisplayFormat(image);
SDL_FreeSurface(image);
}
return optimizedImage;
}
当我加载精灵时
image = sdlf::loadImage("images/image_sprites.jpg");
他们周围都有正方形
循环内的
sdlf::apply_surface(0, 0, image, screen, subj.getClipRun(i));
有谁知道如何摆脱这些方块?
我们是否需要使用SDL_SetColorKey函数来实现此目标?
答案 0 :(得分:0)
制作游戏艺术时请不要使用JPEG
,否则会使图像质量下降并使其看起来更糟。如果您想节省空间,请使用BMP
(或PNG
)等格式。如果你的精灵有少于256种不同的颜色(也就是8位图像),你可以使用GIF
图像。
如果您坚持使用JPEG图像,则必须使用SDL_SetColorKey()
答案 1 :(得分:0)
不要使用JPG文件!
您可以使用“SDL_image 2”来处理png文件或只使用位图。
要使用颜色键,只需添加
即可SDL_SetColorKey(image,SDL_TRUE,SDL_MapRGB(image-> format,0,0xFF,0xFF)); (我在这里使用青色)
所以它会是这样的:
SDL_Surface *loadImage(std::string path) {
SDL_Surface *image = NULL;
SDL_Surface *optimizedImage = NULL;
image = IMG_Load(path.c_str());
SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(image->format, 0, 0xFF, 0xFF));
if (image) {
optimizedImage = SDL_DisplayFormat(image);
SDL_FreeSurface(image);
}
return optimizedImage;
}