SDL2加载屏幕/线程

SDL2 Loading screen/thread

本文关键字:线程 屏幕 加载 SDL2      更新时间:2023-10-16

各位程序员,

在花了几个小时试图在SDL2中实现加载屏幕后,我们没能做到。我们正在创建一个简单的2D开放世界生存游戏(自上而下),它需要我们为不同的实体(兔子、树、岩石等)加载大量的波浪形/精灵。

起初,我们只有一个瓷砖集,包含树木和背景瓷砖。然而,现在,贴图从"样例"50x50平铺贴图扩展为1500x1500平铺贴图。结果:游戏似乎冻结了,但它正在加载瓦片/图像。

我们的解决方案:创建一个加载屏幕,在那里我们可以显示当前加载的进度。由于我们的游戏使用游戏状态的状态模式(或者有点类似),我们将有一个PlayState和一个LoadingState。

我们决定使用一个常规的std::线程来加载所有需要的数据,并将它们转换为纹理。线程的确切作用是:

  1. 读取包含地图数据的JSON文件
  2. 处理检索到的数据并从中创建波浪形符集
  3. 加载图像并创建纹理

它在没有线程的情况下都能工作(除了"冻结",它只加载上面的所有内容),但有了线程,成功/失败的几率大约为60%/40%。经过数小时的搜索,我们找到了原因:SDL2无法从主线程以外的其他线程调用SDL_CreateTexture。

现在,我们一无所知,因为我们不知道如何显示加载屏幕,执行所有上述操作,而不创建不同的线程来执行这些操作。因此,我们的问题是:有没有任何方法可以实现加载屏幕,就像我们上面描述的那样?

提前感谢!

  1. 在文件上循环调用IMG_LoadTexture(),直到显示当前帧为止。

  2. 渲染显示进度的简单图像。

  3. 如果还有更多的纹理要加载,转到1

这是在同一个线程中完成的。