SDL2加载屏幕/线程
SDL2 Loading screen/thread
各位程序员,
在花了几个小时试图在SDL2中实现加载屏幕后,我们没能做到。我们正在创建一个简单的2D开放世界生存游戏(自上而下),它需要我们为不同的实体(兔子、树、岩石等)加载大量的波浪形/精灵。
起初,我们只有一个瓷砖集,包含树木和背景瓷砖。然而,现在,贴图从"样例"50x50平铺贴图扩展为1500x1500平铺贴图。结果:游戏似乎冻结了,但它正在加载瓦片/图像。
我们的解决方案:创建一个加载屏幕,在那里我们可以显示当前加载的进度。由于我们的游戏使用游戏状态的状态模式(或者有点类似),我们将有一个PlayState和一个LoadingState。
我们决定使用一个常规的std::线程来加载所有需要的数据,并将它们转换为纹理。线程的确切作用是:
- 读取包含地图数据的JSON文件
- 处理检索到的数据并从中创建波浪形符集
- 加载图像并创建纹理
它在没有线程的情况下都能工作(除了"冻结",它只加载上面的所有内容),但有了线程,成功/失败的几率大约为60%/40%。经过数小时的搜索,我们找到了原因:SDL2无法从主线程以外的其他线程调用SDL_CreateTexture。
现在,我们一无所知,因为我们不知道如何显示加载屏幕,执行所有上述操作,而不创建不同的线程来执行这些操作。因此,我们的问题是:有没有任何方法可以实现加载屏幕,就像我们上面描述的那样?
提前感谢!
-
在文件上循环调用IMG_LoadTexture(),直到显示当前帧为止。
-
渲染显示进度的简单图像。
-
如果还有更多的纹理要加载,转到1
这是在同一个线程中完成的。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- 使用C 构建器在窗户上拍摄屏幕截图的线程安全
- OpenGL在屏幕外的单独线程与Qt 4.8
- 从线程重新绘制初始屏幕/禁用断言
- 在单独的线程 Qt 中渲染屏幕外小部件
- 线程不刷新数据,在屏幕中显示数据时出错
- SDL2加载屏幕/线程