我最近一直在写一些SDL2,今天我重写了我的代码基础,使其更结构化,更易于使用。
我遇到的问题是当试图blit sprite表面时,它给了我SDL错误Surfaces must not be locked during blit
这似乎是合理的所以我在SDL_UnlockSurface
之前将SDL_BlitSurface
添加到我的blit函数的开头SDL_UnlockSurface
1}}但仍然返回相同的错误。
因为我在文档中看到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;
}
是一个空洞,我不知道它是否成功,但由于它不是多线程的,所以没有任何东西可以强制锁定它而我是blitting(并且它只是绘制到无论如何,在应用程序开始时的表面。)
这是blit功能
{{1}}
提前致谢!
答案 0 :(得分:2)
计算锁定。如果您锁定表面两次,则必须将其解锁两次。最好避免这种方案 - 与锁定表面相同的功能应该在完成工作后将其解锁。
您可以查看surface->locked
变量,这是锁定计数,但它并未包含在文档中,因此您无法依赖此名称 - 可以在将来的版本中进行更改。 / p>