C++ 在屏幕上绘制曲面时,帧速率大幅下降

C++ 在屏幕上绘制曲面时,帧速率大幅下降,c++,sdl,C++,Sdl,我刚刚开始在SDL中制作另一个小游戏,我制作了我的两个玩家-由一个圆圈的上半部分表示。到目前为止,我画了一个背景,上面有两个玩家 if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1; if (!(screen = SDL_SetVideoMode(WIDTH, HEIGHT, DEPTH,SDL_HWSURFACE| SDL_DOUBLEBUF))) { SDL_Quit(); return 1;

我刚刚开始在SDL中制作另一个小游戏,我制作了我的两个玩家-由一个圆圈的上半部分表示。到目前为止,我画了一个背景,上面有两个玩家

if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1;
    if (!(screen = SDL_SetVideoMode(WIDTH, HEIGHT, DEPTH,SDL_HWSURFACE| SDL_DOUBLEBUF)))
    {
        SDL_Quit();
        return 1;
    }

    SDL_Surface* surface2 = SDL_CreateRGBSurface(SDL_HWSURFACE, WIDTH, HEIGHT, 32,
                                   rmask, gmask, bmask, amask);

    SDL_FillRect(surface2, 0, SDL_MapRGBA(surface2->format,0,0xAA,0,0xFF));

        //in the while loop
        SDL_BlitSurface(surface2,0,screen,0);
if(SDL_Init(SDL_Init_VIDEO)<0)返回1;
如果(!(屏幕=SDL_设置视频模式(宽度、高度、深度、SDL_表面| SDL_DOUBLEBUF)))
{
SDL_退出();
返回1;
}
SDL_曲面*曲面2=SDL_CreateRGB曲面(SDL_曲面,宽度,高度,32,
rmask、gmask、bmask、amask);
SDL_FillRect(表面2,0,SDL_映射RGBA(表面2->格式,0,0xAA,0,0xFF));
//在while循环中
SDL_BlitSurface(表面2,0,屏幕0);
当我移动播放器时,它每移动10像素。我用定时器实现了平稳的移动,所以情况并非如此。有趣的是,当我选择将表面2保持为黑色时——开始时没有圆角,那么一切都会顺利进行。
我现在用一种颜色填充屏幕表面,它也可以平滑地运行。那么问题出在哪里呢?

尝试使用SDL_MapRGBA而不是SDL_MapRGBA。你确定你的“SDL_FillRect”没有在循环中调用吗?你有没有碰巧遇到格式不匹配的情况?@halflings当我注释掉那个单独的rect时,问题就消失了。更改为MapRGB没有帮助。@d如果两个曲面都有32位深度,则它们都存储在v卡上。它们的大小也一样。我记得在需要进行格式转换的情况下,性能会显著下降。这可能是像素格式、alpha格式(预乘或非预乘)等等。