游戏引擎上的FRP.这值得么?

fra*_*ees 18 c++ architecture components game-engine frp

今天,我读到了有关FRP(功能反应式编程)的内容.但是,我不知道这适合发动机本身.

阅读Gerold Meisinger的文章后,我的问题是,如果使用FRP而不是基于组件的架构是值得的.这是游戏引擎架构设计的不久的将来吗?这只是解决基于组件的架构的小问题的一种简单方法吗?我很欣赏任何文章,解释,个人意见等.

想想商业游戏的引擎,特别是射击游戏或赛车类型(3D游戏).不要考虑2D平台或其他更简单(谈论引擎复杂性)的平台.我使用C/C++(我注意到使用FRP的人依赖于Haskell,因为它的性质.但是,我看到这个文档并且更喜欢站在C++上,作为"行业标准").

Pau*_*nta 19

C++自然不适合FRP; 你使用的任何库(Boost.Phoenix是一个很好的库)都会带来一些你很可能不想在商业3D游戏中处理的开销.

不仅如此,FRP并不是一种非常发达的游戏技术,即使在Haskell,afaik也是如此; 你想制作一款游戏,还是想开发制作游戏的技巧?

基于组件的实体系统已经存在了很长一段时间,并且是经过验证的概念.它们确实有其局限性,最值得注意的是,组件如何相互通信? - 一种解决方案是拥有两种类型的组件,属性和行为; 后者可以访问任何属性,但是它们不能相互访问.

如果你想制作游戏,请选择CBS.如果你想在游戏中帮助开发FRP,那就去做吧.

顺便说一句,你说二维游戏有简单的引擎是非常错误的.:)


2014年更新

从那以后出现了一种新的语言,它广泛使用功能反应技术,并且针对网络开发,称为Elm.它与Haskell非常相似,并由Prezi,afaik 支持.语言设计师有一个非常好的演示,他使用FRP制作了一个小游戏.任何对如何处理FRP感兴趣的人都可能想看看那个视频.

  • @frarees消息传递系统适用于"很少"发生的事情(如按下按键,有人死亡)("很少"意味着不是每一帧).组件每帧相互通信几次,因此消息传递系统并不好.通过使用消息,您如何通过每一帧有效地通知每个感兴趣的实体位置?•您可以做的一件事是在构造组件时建立组件之间的依赖关系(将与其通信的其他组件传递给构造函数). (2认同)
  • @frarees [续]但问题是,如何确保在创建新组件时,已经创建了所需的所有组件?如果两个组件相互需要怎么办?这是属性/行为分离变得有用的地方:首先创建所有需要的属性,然后创建行为并将它们(在构造函数中)传递给它们所需的属性.行为从不直接相互作用,它们只修改属性的值.而属性什么都不做; 它们只是数据的容器. (2认同)