因此,我从头开始编程时还很陌生,直到现在一直主要使用unity几年,所以我的一般编程知识非常好。暑假过后,我们从一所大学开始研究游戏开发,但从零开始,我们必须在课堂上一起制作的2D引擎中编写简单的游戏作为一项任务。
因此,我决定制作的游戏是轰炸机的副本,而且我已经达到了使炸弹正常运行的目的。
我遇到的问题是我不知道如何正确地添加一个计时器,该计时器可以将炸弹爆炸的时间倒计时,以便玩家可以避免这种情况。
我尝试了SDL_Delay和_sleep,它们都只是暂停了整个程序,因此无法正常工作,我一直在寻找更多选项,但并没有真正理解它们是如何工作的。如果我能得到一些示例说明和指向这些页面的链接,这些页面解释了如何正确地进行类似的工作(一件既简单又轻松的小事:P),那么将不胜感激!
请注意,我们在引擎中使用SDL。
谢谢!
最佳答案
通常,游戏使用一个循环,在该循环中,您读取用户输入(您可能正在使用SDL_PollEvent
),将游戏状态推进一小段时间并绘制屏幕。此循环通常称为游戏循环,渲染循环或主循环。
延迟事件(例如定时爆炸)的一种简单,准确且典型的方法是将将来的时间存储在队列中。然后,每次游戏状态前进时,请检查队列中的第一个时间戳,因此也是最早的时间戳;如果当前时间大于存储的时间戳,那么我们知道事情应该发生了,您可以调用执行的函数该事件刻不容缓。然后从队列中删除时间戳记,并检查下一个时间戳记,直到仅剩下将来的事件或队列为空。
如果事件延迟可能有所不同,那么您将需要使用优先级队列来始终获取下一个将触发的事件。
skypjack在评论中指出,如果您需要实施暂停游戏,这是一种有问题的方法。这可以通过不测量挂钟来解决,而可以使用单独的模拟时间,该模拟时间在游戏暂停时会从挂钟漂移。他们还提出了一个更简单的解决方案:
存储一个timeToEvent(将要过去)并递减它,以便将游戏时间与实际时间分开。一旦
这种方法比较简单,但是在检查截止日期的到期方面有更多的开销。
关于c++ - sleep 还是等待不会停止整个程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34854951/