1

我正在努力做到这一点。我的游戏中有各种爆炸图块的图像。我正在尝试预处理爆炸图块并创建图像,然后将其粘贴到屏幕上。

这是带有 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 是我在上面链接的图像,只是为了说明这一点。如果有人看到我的方式的错误,非常感谢!

我的问题:上面的代码要么在一个完全不可见的表面上,要么在一个黑色的表面上加上图像。

我想我很好奇是否可以执行我上面描述的操作以及是否可以修改此代码以使其正常工作。

4

0 回答 0