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

时间:2011-11-30 19:50:39

标签: c++ architecture components game-engine frp

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

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

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

2 个答案:

答案 0 :(得分:19)

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

不仅如此,FRP并不是一种非常发达的游戏技术,甚至在Haskell中也不是很好;你想制作一款游戏,还是想开发制作游戏的技术?

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

如果您想制作游戏,请使用CBS。如果你想在游戏中帮助开发FRP,那就去做吧。

不过,你说2D游戏有简单的引擎是非常错误的。 :)


2014年更新

此后出现了一种新语言,它广泛使用功能反应技术,旨在进行Web开发,称为Elm。它与Haskell非常相似,并得到Prezi afaik的支持。语言设计师有一个非常好的presentation,他使用FRP做了一个小游戏。任何对如何处理FRP感兴趣的人都可能想看看那个视频。

答案 1 :(得分:3)

简短回答:可能都不是!

  

但是,我不知道这适合发动机本身。

我不明白你的意思,但涉及时间的每一段代码(即使用update( float elapsedTime ))通常都适合FRP - 理论上。关于“适合引擎”,也许HaskellWiki Yampa - Game Engine有助于回答你的问题(我的论文的精简和英文翻译版本,解释了整体架构)。从关于FRP和阅读一些FRP论文的讨论来看,整体理论概念似乎还有一些未解决的问题,因此我建议在商业项目中使用任何FRP库之前进行一些彻底的测试(特别是性能和内存)问题)。看看Frag video。这是一个用FRP编写的射击游戏,也是今天最先进的例子。

  

想想商业游戏的引擎,特别是射击游戏或赛车类型(3D游戏)。

嗯,你的重点是什么?你在开发商业游戏吗?然后使用现有的引擎,不要担心它!你在开发引擎吗?那么FRP可能是一个有趣的概念。对于射击游戏和赛车游戏来说,不一定需要改变带有组件的游戏对象,因为他们只使用很少的不同游戏对象,过多地关注架构可能会过度工程化。没有焦点?聚焦!你不能自己开发下一个IdTech引擎和下一个Doom游戏。

  

我看到了这个文档,并且更喜欢站在C ++上,作为“行业标准”

也有一些C ++库。搜索“被动或时间编程”。