6

似乎每个人都在用响应式香蕉 FRP 框架做电脑游戏,所以我也不得不尝试一下。然而,我坚持早期的步骤,试图将游戏数据描述为反应香蕉Behavior类型。

基本上,我试图拥有一个(不断变化的)游戏角色列表(例如佛罗多或山姆)。游戏角色可能会在每个游戏刻更新(建模为刻事件)。这个想法是,每当游戏角色发生变化时,Event (Character)都会触发一个单一的,并且最终通过网络发送角色更新。与Asteroids.hs示例相比,这样做的好处应该是整个游戏状态(整个游戏角色列表)不需要通过网络发送,因为会有许多事件具有单个游戏角色而不是带有游戏角色列表的单个事件。

对于单个游戏角色,这很好用!我创建了Behavior (Character)with mapaccum,以便在更新字符时发送字符更新信号。我无法解决的问题是如何使用Behavior游戏角色列表进行这项工作。

我正在尝试将游戏角色列表建模为Behavior,因为角色可能在游戏中来来去去。我需要在这里使用动态事件切换吗?或者,如果我不Behavior与单个游戏角色一起使用(并且仅Behavior与游戏角色列表一起使用),是否有办法在我浏览角色列表时有条件地触发更新事件?还是我不明白这里的东西?

4

1 回答 1

5

要管理行为的动态集合,您必须使用动态事件切换。有关演示,请参阅BarTab.hs示例。

但是,动态事件切换可能有点笨拙,通常可以避免它。两种常见的情况是:

  1. 行为的集合是静态已知的。TwoCounters.hs演示了可以简单地使用应用仿函数组合器来计算取决于任一行为的值。
  2. 动态集合可以建模为Behavior [a]集合的行为 (),而不是行为的集合 ( [Behavior a])。Asteroids.hs示例演示了如何使用它。这是一种风格上的权衡:不能再用 FRP 来制定集合的各个条目,但集合变得更容易管理。
于 2013-06-19T21:06:33.963 回答