gpt4 book ai didi

c++ - SDL2 加载屏幕/线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:44 25 4
gpt4 key购买 nike

<分区>

各位程序员好,

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

起初我们只有一个图 block 集,包含树木和背景图 block 。然而,现在 map 从“示例”50x50 瓦片 map 扩展到 1500x1500 瓦片 map 。结果:游戏似乎卡住了,但它正在加载图 block /图像。

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

我们决定使用常规的 std::thread 来加载所有需要的数据并将它们转换为纹理。线程到底做了什么,是这样的:

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

这一切在没有线程的情况下都能正常工作(“卡住”除外,它只加载以上所有内容),但在有线程的情况下,它的成功/失败率大约为 60%/40%。经过数小时的搜索,我们找到了原因:SDL2 cannot call SDL_CreateTexture 来自与主线程不同的线程。

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

提前致谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com