11

我目前正在玩 Scala 开发,但我需要与 box2d 等库集成来处理物理。问题是这需要依赖于管理自己状态的外部库。你跟踪你传入 box2d 世界的物体。总结一下游戏中的各个方面:

  • Box2d 管理世界中的状态并在每个滴答/步骤后修改它们
  • 您创建(使用 FP)传递到这个世界的身体
  • Box2d 在内部修改这些物体的状态
  • 要跟踪对象,请保留对它们的引用
  • 您很可能希望使用正文中的信息来呈现您的代码,因此我认为跟踪该信息的唯一方法是跟踪可变集合中的所有引用。它需要在所有帧中存活。

所以我的问题是:

您如何以优雅的方式(用于函数式编程)跟踪这些引用,以及如何将其对其余代码纯度的影响降至最低?

我猜像状态单子这样的东西在这里对我没有帮助

4

2 回答 2

5

实用的方法是确定要封装的不纯操作必须保持哪些不变量,而不会泄露存在副作用的事实,然后,一旦你有证据表明是这种情况,将状态隐藏在“unsafePerformIO”中。

另一种方法是公开存在内部状态的事实,例如通过明确的“我已被初始化”令牌,这是不可伪造和不可分割的,以保证对底层资源的线性访问。

于 2010-09-05T17:11:18.117 回答
3

功能响应式编程是一个活跃的研究领域,尽管如果您不需要对因果关系建模,您可以在此处使用Reader Monad 。

于 2010-09-05T17:08:09.890 回答