似乎每个人都在使用反应性香蕉FRP框架进行电脑游戏,所以我也必须尝试一下。但是,我坚持早期的步骤,试图将游戏数据描述为反应性香蕉Behavior
类型。
基本上,我正在尝试拥有(更改)游戏角色列表(例如佛罗多或山姆)。游戏角色可能会在每个游戏刻度上更新(建模为刻度事件)。我们的想法是,每当游戏角色发生变化时,都会触发一个Event (Character)
,最后通过网络发送角色更新。与Asteroids.hs示例相比,这样做的好处应该是整个游戏状态(整个游戏角色列表)不需要通过网络发送,因为会有许多事件都有一个游戏角色,而不是带有游戏角色列表的单个事件。
对于单个游戏角色,这很好用!我使用Behavior (Character)
创建了mapaccum
,以便在更新字符时发送字符更新信号。我无法解决的问题是如何使用Behavior
游戏角色列表进行此操作。
我正在尝试将游戏角色列表建模为Behavior
,因为角色可能会在游戏过程中出现。我需要在这里使用动态事件切换吗?或者,如果我不将Behavior
与单个游戏角色一起使用(并且仅将Behavior
与游戏角色列表一起使用),是否有办法在我通过角色时有条件地触发更新事件清单?或者我在这里不明白?
答案 0 :(得分:5)
要管理动态的行为集合,您必须使用动态事件切换。有关演示,请参阅BarTab.hs示例。
但是,动态事件切换可能有点笨拙,通常可以避免它。两种常见情况是:
Behavior [a]
)的行为,而不是行为集合([Behavior a]
)。 Asteroids.hs示例演示了如何使用它。这是一种风格权衡:系列的各个条目不再用FRP制定,但该系列变得更容易管理。