我正在制作一个基于文本的角色扮演游戏,我真的很想模拟时间。
我可以在每次玩家输入内容之间留出一些时间,但如果可能的话,我希望它比这更好。我想知道多线程是否是执行此操作的好方法。
我在想也许只有第二个,非常简单的线程在后台,只有一个循环,每 1000 毫秒循环一次。每通过一次循环,世界时间就会增加 1 秒,玩家会恢复一点生命值和法力值。
这是多线程可以做的事情,还是有一些我不知道的东西会导致它不起作用? (如果它不能帮助我完成这个项目,我宁愿不花大量时间努力学习它。)
最佳答案
是的,多线程当然可以做到这一点,但请注意线程通常比替代方法更复杂(这将是主线程轮询各种更新事件作为其主循环的一部分,它应该至少每 100 毫秒运行一次无论如何)。
在您的情况下,如果时钟线程遵循非常严格的规则,您可能会“没问题”。
- 时钟线程是唯一允许设置/修改时间变量的线程。
- 主/ui 线程只允许读取时间。
- 您仍然必须使用系统时间函数,因为线程 sleep 函数的准确性不可信(根据系统事件,线程的更新循环可能要到您请求它运行几毫秒后才会运行)。
如果你这样实现它,那么你甚至不需要熟悉互斥量就可以让线程安全地启动和运行,而且你的时间将是准确的。
但是!这里有一些值得深思的问题:如果您想在一天中的特定时间绑定(bind)游戏内触发器怎么办?例如,将向用户发布的消息 “The sun has set” 或类似消息。执行此操作所需的代码无论如何都需要在主线程上运行(除非您想实现跨线程消息通信队列!),并且可能看起来非常像基本的定期检查和更新时钟代码.所以在这一点上,你最好还是保留一个简单的统一线程模型。
关于c++ - 在文本冒险中实现实时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060148/