SDL透明精灵方块

SDL transparent sprite squares

本文关键字:方块 精灵 透明 SDL      更新时间:2023-10-16

我在游戏中使用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函数来实现这个目标吗?

请勿在制作游戏美术时使用JPEG,这会使图像恶化,使其看起来更差。请使用BMP格式(或PNG,如果你想节省空间)。如果你的精灵有少于256种不同的颜色(也就是8位图像),你可以使用GIF图像。

如果你坚持使用JPEG图像,那么你必须使用SDL_SetColorKey()

请勿使用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;
}