我最近一直在写一些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
变量,它是锁计数,但未包含在文档中,因此您不能依赖此名称-将来的版本中可能会更改它。