问题标签 [reactive-banana]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
303 浏览

haskell - 功能香蕉旅行者 - 计时器和玩家独立事件

我在我的 Traveler 中尝试处理与玩家无关的游戏状态更新。作为参考,项目在这里(开发分支是这个问题的相关分支)。

Libraries/Universe/GameState.hs有一个函数,updateGS它处理所有玩家对游戏状态的更新。现在的EventNetwork样子是这样的。

实现这个计时器的问题是,我看过的所有示例都有一个与我不同的用例,即物理模拟。这个游戏不涉及物理。我正在尝试使用计时器来评估游戏状态,而不受玩家操作的影响。目前,我唯一想要管理的就是超空间旅行。完全实施后,从一个行星移动到另一个行星会将Agent's更改locationRight Hyperspace。现在需要发生的是,当 atick发生时,distanceTraversed加一。那么如果distanceTraversedequalstotalDistance Agent的位置就变成了Left Planet

EventNetwork那么从的角度来看,这会是什么样子呢?

现在结合行为

这是正确的轨道吗?

0 投票
1 回答
436 浏览

haskell - 推与拉反应香蕉

我正在使用响应式香蕉构建一个类似媒体播放器的应用程序。

假设我想要一个Behavior代表曲目列表中当前选定曲目的曲目。

我有两个选择:用于fromPoll在需要时获取当前选择;或使用fromChanges并订阅选择更改事件。

Behavior只有当用户按下“播放”按钮时,我才会使用选定的曲目。此事件比选择更改要少得多。

鉴于此,我认为这fromPoll会比fromChanges在这种情况下更好/更有效。但是文档说“获得Behaviors 的推荐方法是使用fromChanges”。

它在这里仍然适用吗?即轮询操作是否会比网络实际使用(采样)的频率更高?

0 投票
0 回答
140 浏览

haskell - 机能香蕉旅者-断型之谜

我收到以下错误:

t0in the和Eventthe t1in theBehavior是我对这个问题的线索,但我不知道如何解释这个线索。所以让我们从一些类型开始,错误的代码和我对它为什么应该工作的推理。

initialAMap :: AgentMap

updateAgentMap :: HyperMap -> PlanetMap -> AgentMap -> AgentMap

bHyperMap :: Behavior t HyperMap

bPlanetMap :: Behavior t PlanetMap

accumB :: a -> Event t (a -> a) -> Behavior t a

所以我已经涵盖了第一个参数,AgentMap. 第二个需要Event t (AgentMap -> AgentMap)。到那里怎么走?如果我以 开头updateAgentMap <$> bHyperMap,类型应该是Behavior t (PlanetMap -> AgentMap -> AgentMap)。好的,再一个参数updateAgentMap <$> bHyperMap <*> bPlanetMap给我们一个 type Behavior t (AgentMap -> AgentMap)。快到了吧?

鉴于此 (<@) :: f a -> g b -> g aeTick :: Event t ()

并代替a(AgentMap -> AgentMap) 应该能够做到这一点 (updateAgentMap <$> bHyperMap <*> bPlanetMap)<@ eTick

要得到Event t (AgentMap -> AgentMap)

但没那么快。我的推理一定在某个地方失败了。谁能告诉我在哪里?

更新:原来这个问题的发生是因为 eTick 没有定义(我认为)。我曾试图将大部分代码分离到它自己的文件中。我知道离开 eTickundefined不会令人满意,但我还没有弄清楚我想对此做些什么。因此,与此同时,我开始将代码移动到最初的let绑定中。现在我的代码编译了。我不希望let绑定在那里停留太久。我的期望是重新审视这个突破性项目将告诉我如何更好地构建我的代码。

0 投票
1 回答
242 浏览

haskell - 如何使行为包含反应香蕉中的其他行为

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

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

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

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

0 投票
1 回答
102 浏览

haskell - 功能香蕉旅行者 - 输入处理:这会做我想要的吗?

我想为我的游戏管理输入的方式是轮询 TChan,然后在 eTick 发生时创建一个事件。但我尝试的方式会奏效吗?

data UAC = UAC (AID,PlayerCommand) deriving Show

来自fromPoll “输入,通过频繁轮询可变数据(例如当前时间)来获取行为。每当事件网络处理输入事件时,都会更新生成的行为”的文档。

我是否正确理解这一点?Tchan 是从其他代码中填充的,然后eTick我每次清空它并得到另一个Event t [UAC]

也许我的理解是错误的,或者这种计算对于 fromPoll 来说太昂贵了。在这种情况下,更好的方向是什么?

0 投票
2 回答
183 浏览

haskell - 如何使用 IO 函数转换事件?

假设我有

我想创建

它由 触发e1,其值是通过在事件发生时f对 的值执行来确定的。e1

我看到了两种可能的方法来做到这一点,通过动态事件切换和使用处理程序,但对于这么简单的事情来说,它们看起来都太复杂了。

这样做的正确方法是什么?

0 投票
1 回答
618 浏览

haskell - 有反应香蕉gtk吗?

我找到了 reactive-banana-wx 并想知道是否还有一个类似的 gtk 包,因为根据http://www.haskell.org/haskellwiki/Reactive-banana ,响应式香蕉应该支持 gtk

0 投票
1 回答
211 浏览

haskell - 功能性香蕉旅行者 - 我的滴答事件有什么问题?

我正在尝试实现一个滴答事件,并在下面进行了一个小测试,证明它不起作用。我很欣赏关于为什么它不起作用的洞察力。

这是一些测试数据。

当我执行上述操作时,Main我得到了这个输出。

该文件Commands.txt永远不会存在。我将此问题归因于错误的滴答事件。

我从中得到了定时器实现的想法但想知道我是否以错误的方式思考这个问题。有任何想法吗?

编辑:我想要一些保证fromPoll是做正确的事。我添加了上面的测试,它是。

0 投票
1 回答
446 浏览

haskell - 如何实现递归依赖自身的反应香蕉行为?

我有一个行为,我想根据事件的发生和行为的当前值更改其值。在下面的示例中,我有两个计数器,它们根据布尔行为是 True 还是 False 进行更新。因为它是这个代码崩溃<<loop>>异常,但我不确定如何重组它以工作或如何解决这个问题。

0 投票
3 回答
139 浏览

haskell - 过滤反应香蕉中的重复事件

假设我有

我可以得到它的第一个组件:

但是,即使第一个组件没有更改,此事件也会触发。我想避免这种情况,因为它会引发昂贵的重新计算。

A是 的一个实例Eq,因此我希望能够删除第一个组件与其最后一个值相比未更改的连续事件。

理想情况下,我想要一个功能

这将在不诉诸Moment单子的情况下做到这一点。可能吗?或者最好的方法是什么?