2013-12-16 41 views
25

我一直在比较推拉式玻璃钢(即netwire)与推拉式玻璃钢(即反应bannana)在游戏的实施。一个人比另一个人有优势吗?事情我已经通知如下:推拉玻璃钢在实施游戏时有帮助吗?

  • 推送事件可以很容易地对鼠标点击/从GLFW或GLUT
  • Arrowized FRP按键是netwire用途的事件要少得多IO左右浮动,它始终是更好。
  • 它看起来像只鼠标移动可能会导致时间泄漏拉回答。

我还错过了什么?

编辑,使其不那么基于观点:主要目标是尽可能表达/简洁,没有时间泄漏。

更新:我在Netwire发现的一个大问题是,如文章“修复您的Timestep”中所述,似乎并没有一种方便的方式来获得多个帧速率。

更新2:我已经解决此得到的方式是让我的游戏仿真丝返回Float -> IO(),是以阿尔法值和做所有的GL一切由阿尔法插值调用。理想情况下,我应该可以通过MVar将这个“绘图函数”传递到另一个线程中,并在该线程中运行它。男人,哈斯克尔真棒。

更新3:自从提出这个问题的六个月内,我公司开发的基于周围Netwire一个simple rendering engine,和“的概念实体组件编程。”在这个过程中,我实际上没有发现使用FRP是非常有帮助的。在某些情况下,Wire的表现实际上已成为阻碍。问题围绕着对象的“身份”。当定义值为Wire类型时,它没有标识,即它可以在整个网络中多次重复使用,并且每次代表不同的物理事物。当你想要做碰撞检测之类的事情时,这是一个巨大的痛苦,并且无法遍历场景图形,因为如果不融合成一条不透明的线路,它就无法存在。这个问题在“玩具”例子中不会发生,因为它容易与哪些对象的哪些属性与哪些其他对象以哪种方式进行交互。我相信这是任何一种玻璃钢的问题。

如果一些Haskell向导在这方面证明我是错误的,那将是非常棒的,但我真的没有看到解决方法。另外,如果解释不是很好,我很抱歉,但如果不亲自尝试,这并不容易理解。

回答

2

从我能读的herethere,Netwirereactive-banana有不同的目的和目标。 Netwire专注于建模框架信号,例如游戏服务器,因为游戏服务器通常会以周期性帧的形式将其状态发送给客户端。反应性香蕉是创建GUI的更好选择,因为GUI是纯粹的事件驱动模型,不能容忍时间泄漏。

在我看来,您可以同时使用两者,具体取决于您想要实现哪个方面。

+0

有趣。它们是否相互兼容?也就是说,你能把信息从一个传递给另一个吗? – Dan

+0

在游戏引擎中使用netwire之后,我可以说它出色地适合于这个目的,因为你说的原因。 – Dan