睡觉或等待不会停止整个程序?

Sleep or wait that doesnt stop the whole program?

所以我对从零开始的编程很陌生,到目前为止主要使用 unity 几年,所以我的一般编程知识非常好。暑假后开始在大学学习游戏开发,虽然我们从头开始编程,作为一项任务,我们必须在 class.

中一起制作的 2D 引擎中制作一个简单的游戏。

所以我决定制作的游戏是 bomberman 的副本,我已经达到了现在让炸弹发挥作用的程度。

我遇到的问题是我不知道如何正确地添加一个计时器来倒计时炸弹爆炸的位置,以便玩家可以避免它。

我试过 SDL_Delay 和 _sleep ,它们都只是暂停整个程序,所以这不起作用,我搜索了更多选项,但并不真正了解它们是如何工作的。如果我能得到一些示例和指向页面的链接,这些页面解释了如何正确地使这样的东西工作(简单而小的希望 :P)那么我将不胜感激!

请注意,我们在引擎中使用 SDL。

谢谢!

通常,游戏使用一个循环,您在其中读取用户输入(您可能正在为此使用 SDL_PollEvent),在短时间内推进游戏状态并绘制屏幕。此循环通常称为游戏循环、渲染循环或主循环。

延迟事件(例如定时爆炸)的一种简单、准确且典型的方法是将未来时间存储到队列中。然后,每次游戏状态前进时,检查队列中第一个也是最旧的时间戳,如果当前时间高于存储的时间,那么我们就知道事情现在应该发生了,你可以调用执行的函数事件刻不容缓。然后从队列中删除时间戳并检查下一个,直到只剩下未来事件或队列为空。

如果事件延迟可能会有所不同,那么您将需要使用优先级队列来始终获取下一个应该触发的事件。

skypjack 在评论中指出,如果您需要实现暂停游戏,这是一种有问题的方法。这可以通过不测量挂钟来解决,而是使用在游戏暂停时从挂钟漂移的单独模拟时间。他们还提出了一个更简单的解决方案:

store a timeToEvent (to be elapsed) and decrement it, so that you detach the game time from the real one. Once it's <= 0, it's its time.

该方法更简单,但检查截止日期到期的开销更大。