我最近一直在写一些SDL2,今天我重写了我的代码基础,以使其结构更易用。

我遇到的问题是尝试对精灵表面进行钝化处理时,它给了我SDL错误Surfaces must not be locked during blit,这似乎是合理的,因此我在SDL_UnlockSurface之前将SDL_BlitSurface添加到了blit函数的开头,但仍然返回了相同的错误。
因为我在文档中看到SDL_UnlockSurface是一个空值,所以我不知道它是否成功,但是由于它不是多线程的,因此在我发信号时,没有任何东西可以强制锁定它(并且它只是在表面绘制)无论如何启动应用程序)。

这是blit函数

bool Sprite::blit(SDL_Surface* targetSurface){
    SDL_UnlockSurface(this->surface);
    int success = SDL_BlitSurface( this->surface, NULL, targetSurface, NULL );
    if ( success != 0){
        printf( "Unable to blit surface! SDL Error: %s\n"m SDL_GetError() );
        return false;
        }
    return true;
}


提前致谢!

最佳答案

锁计数。如果您两次锁定表面,则必须将其解锁两次。最好避免使用此方案-锁定表面在完成其工作后应解锁的功能相同。

您可以查看surface->locked变量,它是锁计数,但未包含在文档中,因此您不能依赖此名称-将来的版本中可能会更改它。

09-06 12:21