SDL透明精灵方块

时间:2014-03-30 21:30:58

标签: c++ sdl

我使用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");

他们周围都有正方形

for exsample

循环内的

sdlf::apply_surface(0, 0, image, screen, subj.getClipRun(i));

有谁知道如何摆脱这些方块?

我们是否需要使用SDL_SetColorKey函数来实现此目标?

2 个答案:

答案 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;
}