SDL2加载屏幕/线程

时间:2014-11-04 17:19:42

标签: c++ multithreading sdl

嗨其他程序员,

在花费数小时试图在SDL2中实现加载屏幕后,我们没有这样做。我们正在创建一个简单的2D开放世界生存游戏(自上而下),这需要我们为不同的实体(兔子,树木,岩石等)加载大量的tilesets / sprite。

起初我们只有一个tileset,包含树和背景图块。然而,现在,地图从“样本”50x50平铺地图扩展到1500x1500平铺地图。结果:游戏似乎冻结了,但它正在加载瓷砖/图像。

我们的解决方案:创建一个加载屏幕,我们可以在其中显示当前正在加载的内容的进度。由于我们的游戏使用游戏状态的状态模式(或者有点像它),我们有一个PlayState和一个LoadingState。

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

  1. 读取包含地图数据的JSON文件
  2. 处理检索到的数据并从中创建tilesets
  3. 加载图片并创建纹理
  4. 这一切都可以在没有线程的情况下工作(除了'冻结',它只加载以上所有内容),但是对于一个线程,它就像成功/失败的60%/ 40%。经过数小时和数小时的搜索,我们找到了原因:SDL2 cannot call SDL_CreateTexture来自主线程以外的其他线程。

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

    提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

  3. 如果要加载任何纹理,请转到1

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