睡眠或等待不会停止整个程序
Sleep or wait that doesnt stop the whole program?
所以我对从头开始编程很陌生,到目前为止主要使用unity已经有几年了,所以我的一般编程知识非常好。暑假后开始在一所大学学习游戏开发,尽管我们从头开始编程,作为一项任务,我们必须在课堂上一起制作的 2D 引擎中制作一个简单的游戏。
所以我决定做的游戏是炸弹人的副本,我已经走到了我现在使炸弹发挥作用的地方。
我遇到的问题是我不知道如何适当地添加一个计时器,将炸弹发射的时间倒计时,以便玩家可以避免它。
我已经尝试了SDL_Delay和_sleep,它们都只是暂停了整个程序,因此不起作用,并且我已经搜索了更多选项,但并不真正了解事情是如何工作的。如果我能得到一些扩展和页面链接,解释如何正确制作这样的东西(一些简单而小的希望:P),那么将不胜感激!
请注意,我们在引擎中使用 SDL。
谢谢!
通常,游戏使用循环,在该循环中,您读取用户输入(您可能为此使用 SDL_PollEvent
),在短时间内推进游戏状态并绘制屏幕。此循环通常称为游戏循环、渲染循环或主循环。
延迟事件(如定时爆炸)的一种简单、准确和典型的方法是将未来时间存储到队列中。然后,每次游戏状态推进时,检查队列中的第一个时间戳,因此也是最早的时间戳,如果当前时间高于存储的时间,那么我们知道事情现在应该发生,您可以调用执行事件的函数没有延迟。然后从队列中删除时间戳并检查下一个时间戳,直到只剩下将来的事件或队列为空。
如果事件延迟可能有所不同,则需要使用优先级队列来始终获取接下来应触发的事件。
Skypjack在评论中指出,如果您需要实现暂停游戏,这是一种有问题的方法。这可以通过不测量挂钟来解决,而是使用单独的模拟时间,当游戏暂停时,该时间会偏离挂钟。他们还提出了一个更简单的解决方案:
存储一个 timeToEvent(待过去)并递减它,以便您将游戏时间与真实时间分离。一旦它<= 0,就是它的时间。
这种方法更简单,但检查截止日期的开销更大。
- 在线编译器 - 等待输入并自动馈送输入时拦截程序
- 如何在不冻结程序的主线程的情况下等待条形码读取器输入
- 如何停止C 程序在等待条件时关闭时崩溃
- 在 UWP 应用程序中,future.wait() 在尝试同步来自异步方法的响应时继续等待
- 使用 crontab 运行 C++ 程序,"cin"不会等待我的输入
- 多线程程序挂起条件等待
- 有没有办法在没有"entering key"的情况下等待并暂停程序?
- 我可以使用stackful协程作为steady_timer的等待处理程序吗?steady_imer是在非常stackfu
- 从 MFC 应用程序启动 Java 时,在 MFC 应用程序中显示等待光标,直到它完成其进程
- 如何使程序等待进程打开后再运行
- 如何等待 asio 处理程序
- 程序不等待 cin
- 如何让程序等待键盘输入
- 等待从获取锁的函数调用的帮助程序函数中的条件变量
- 在自定义组合框下拉列表控件上等待超过5秒会导致win32 C++应用程序在Windows7中挂起
- 等待输入C++时继续程序
- 使程序在无限循环中等待时使用更少的 CPU
- 如何使我的C++程序永远等待传感器事件而不终止
- Zeromq如何制作一个允许它不等待客户端请求的C ++服务器程序
- 扫描程序等待另一个类似的程序