gpt4 book ai didi

c++ - 基于时间的事件处理

转载 作者:行者123 更新时间:2023-11-30 04:28:36 24 4
gpt4 key购买 nike

我目前正在编写一个简单的游戏,以学习如何在 C++ 中使用 SFML。到目前为止,一切进展顺利,我对与 SFML 相关的大部分事情有了基本的了解。我遇到的问题是找到一种有效的方法来处理基于时间的事件。

我正在开发的游戏是一款非常简单的太空入侵者类游戏,在关卡期间,敌人会在预定义的时间出现。到目前为止,我有一个事件类,它保存和控制每个调用的事件应该发生什么,以便让我多次重用简单的事件。截至目前,我通过使用 SFML 时钟循环触发这些事件,并且游戏循环的每次迭代都运行当前级别的所有事件的 vector ,并将时钟上耗时与事件的指定时间进行比较叫做。问题是我必须在每个游戏循环迭代中检查整个事件 vector ,如果事件列表足够长,我担心它会开始对游戏性能产生影响。

我有一个想法,为每个事件提供一个简单的数字 Id 作为其在时间轴中的位置,并简单地存储下一个应该运行的事件,这样我只需要在每次循环迭代中检查一个事件的时间,而 while我认为这会工作得很好,我很好奇是否有一种不需要检查每个循环迭代的更有效的方法是可能的?我研究了一些事件驱动的编程,但找不到与基于时间的事件具体相关的内容。

因此,我想知道是否有人对时间线或基于时间的事件触发有任何经验,并且可以提供任何提示或资源以找出更有效的想法?任何帮助都会很棒,谢谢!

最佳答案

您建议的方法只是每次通过游戏循环进行一次比较。没有比这更快的了。

要允许多个事件同时触发,请使用 multimap ,其中键是事件时间,值是事件本身。 multimap 将按时间排序。

每次通过游戏循环,做这样的事情(伪代码):

now = getCurrentTime()
while not events.isEmpty() and events.firstElement().key() < now:
e = events.firstElement().value
e.execute()
events.removeFirst()

关于c++ - 基于时间的事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015913/

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