我正在努力做到这一点。我的游戏中有各种爆炸图块的图像。我正在尝试预处理爆炸图块并创建图像,然后将其粘贴到屏幕上。
这是带有 alpha 蒙版的图块表:爆炸
现在,我想对这些进行 blit,并让它们保持其 alpha 透明度到我可以渲染的表面上。
这是我的代码:
SDL_Surface* SpriteManager::buildExplosion(int id, SDL_Surface* image, int size)
{
// Create the surface that will hold the explosion image
SDL_Surface* explosion = SDL_CreateRGBSurface(SDL_HWSURFACE, size * 32 , size * 32, 32, 0, 0, 0, 255 );
// Our source and destination surfaces
SDL_Rect srcrect;
SDL_Rect dstrect;
int parentX = sprites[id].x;
int parentY = sprites[id].y;
int middle = size / 2;
// Create the first image
srcrect.x = sprites[id].imgBlockX * 32; // default for now
srcrect.y = sprites[id].imgBlockY * 32; // default for now
srcrect.w = 32;
srcrect.h = 32;
// Get the location it should be applied to
dstrect.x = middle * 32;
dstrect.y = middle * 32;
dstrect.w = 32;
dstrect.h = 32;
// Apply the texture
SDL_BlitSurface(image, &srcrect, explosion, &dstrect);
errorLog.writeError("Applying surface from x: %i y: %i to x: %i y:%i", srcrect.x, srcrect.y, dstrect.x, dstrect.y);
// Iterate through each explosion
for(int i = 0; i < sprites[id].children.size(); i++)
{
// Get the texture source
srcrect.x = 0; // default for now
srcrect.y = 0; // default for now
srcrect.w = 32;
srcrect.h = 32;
// Get the location it should be applied to
dstrect.x = sprites[id].children[i].x - parentX * 32;
dstrect.y = sprites[id].children[i].y - parentY * 32;
dstrect.w = 32;
dstrect.h = 32;
// Apply the texture
SDL_BlitSurface(image, &srcrect, explosion, &dstrect);
}
//return img;
return explosion;
}
我怀疑它与这条线有关,但我真的很茫然:
SDL_Surface* explosion = SDL_CreateRGBSurface(SDL_HWSURFACE, size * 32 , size * 32, 32, 0, 0, 0, 255 );
名为 image 的 SDL_Surface 是我在上面链接的图像,只是为了说明这一点。如果有人看到我的方式的错误,非常感谢!
我的问题:上面的代码要么在一个完全不可见的表面上,要么在一个黑色的表面上加上图像。
我想我很好奇是否可以执行我上面描述的操作以及是否可以修改此代码以使其正常工作。