嗨其他程序员,
在花费数小时试图在SDL2中实现加载屏幕后,我们没有这样做。我们正在创建一个简单的2D开放世界生存游戏(自上而下),这需要我们为不同的实体(兔子,树木,岩石等)加载大量的tilesets / sprite。
起初我们只有一个tileset,包含树和背景图块。然而,现在,地图从“样本”50x50平铺地图扩展到1500x1500平铺地图。结果:游戏似乎冻结了,但它正在加载瓷砖/图像。
我们的解决方案:创建一个加载屏幕,我们可以在其中显示当前正在加载的内容的进度。由于我们的游戏使用游戏状态的状态模式(或者有点像它),我们有一个PlayState和一个LoadingState。
我们决定使用常规的std :: thread来加载所需的所有数据并将它们转换为纹理。线程的确切作用是:
这一切都可以在没有线程的情况下工作(除了'冻结',它只加载以上所有内容),但是对于一个线程,它就像成功/失败的60%/ 40%。经过数小时和数小时的搜索,我们找到了原因:SDL2 cannot call SDL_CreateTexture来自主线程以外的其他线程。
现在,我们一无所知,因为我们不知道如何显示加载屏幕,执行上述所有操作,而无需创建不同的线程来执行这些操作。因此我们的问题是:是否有任何方式可以实现加载屏幕,我们上面描述的方式是什么?
提前致谢!
答案 0 :(得分:1)
在文件循环中调用IMG_LoadTexture(),直到显示当前帧为止。
渲染显示进度的简单图像。
如果要加载任何纹理,请转到1
这是在同一个线程中完成的。