我最近一直在编写一些 SDL2,今天我重写了我的代码基础,使其更加结构化和更易于使用。
我遇到的问题是当尝试 blit Sprite 表面时,它给我 SDL 错误 Surfaces must not be locked during blit
这似乎是合理的所以我添加了 SDL_UnlockSurface
到我的 blit 函数的开头 SDL_BlitSurface
之前,但仍然返回相同的错误。
因为我在文档中看到 SDL_UnlockSurface
是空的,所以我不知道它是否成功,但由于它不是多线程的,所以在我进行 blitting 时没有任何东西可以强制锁定它(而且它只是无论如何在应用程序开始时绘制到表面)。
这是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
变量,它是锁计数,但它没有包含在文档中,所以您不能依赖这个名称 - 它可能会在未来的版本中更改.
关于c++ - SDL2 无法解锁表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478030/