C++ SFML解析事件代码

C++ SFML解析事件代码,c++,parsing,events,sfml,C++,Parsing,Events,Sfml,我不知道如何改进在SFML中处理事件的方式: 所以我有一个名为processEvents()的函数,它有一个事件类型的开关,我也有一个用于每种类型的函数(如mousePressed、MouseRelease、keyPressed…)。我的问题是这些函数的大小,因为我还有一个用于游戏状态的枚举类,所以在每个函数中都有一个开关,在每种情况下,我做不同的事情,结果是mousererelease,例如341行长 我想知道如何更好地解析事件以减小函数的大小。您可以使用std::vector down并使用

我不知道如何改进在SFML中处理事件的方式:

所以我有一个名为processEvents()的函数,它有一个事件类型的开关,我也有一个用于每种类型的函数(如mousePressed、MouseRelease、keyPressed…)。我的问题是这些函数的大小,因为我还有一个用于游戏状态的枚举类,所以在每个函数中都有一个开关,在每种情况下,我做不同的事情,结果是mousererelease,例如341行长


我想知道如何更好地解析事件以减小函数的大小。

您可以使用
std::vector down
并使用索引键代码或鼠标按钮(一个向量用于键盘,另一个向量用于鼠标)。然后,当接收到按下的事件时,您只需执行
down[event.key.code]=true
,当接收到释放的事件时,您将其设置为
false
,您实际上想要分散处理代码。允许各种组件在某个“sfml事件调度器”对象上注册事件的处理程序。此对象的唯一任务是在事件到达时调用相应的处理程序(可以使用std::函数表示),而不知道该处理程序具体执行什么操作。

拆分为多个较小的函数?查看“谢谢”,这看起来很有趣谢谢,我不知道std::function是如何工作的,但我可以学习:)更好地使用
std::map
,这样你就不必映射所有可能的值,即使它们没有被使用。@Mario
std::unordered\u map
会更好,但考虑到同时按下的键的数量总是很低,甚至更好(即使有人在敲击键盘,也可能<30),一个简单的
std::vector
和线性查找更好。不,std::map访问速度慢。而且std::vector是一个模板专用化,每个布尔值只占用内存一点,所以这没关系:)