问题标签 [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.
haskell - 使用 Reactive Banana 做一些基本的微积分
设置:
我正在使用 Reactive Banana 和 OpenGL,并且我有一个想要旋转的齿轮。我有以下信号:
最终,我需要计算bAngle
哪个是过去的绘图功能:
角度很容易计算:a = ∫v(t) dt
问题:
我想我想要做的是将这个积分近似a = ∑ v Δt
为每个 eDisplay 事件(或者如果需要,更频繁)。这是解决这个问题的正确方法吗?如果是这样,我如何Δt
得到bTime
?
另请参阅:我怀疑答案使用了该mapAccum
功能。如果是这样,也请参阅我的其他问题。
multithreading - SDL-Mixer 音频在启动 Reactive-Banana 输入循环时停止
我一直在开发一款使用多个音轨的游戏,其音量会根据鼠标移动实时调整。我将 SDl-Mixer 用于音频,将 Reactive-Banana 用于游戏。问题是在开始时已经开始播放的曲目在输入循环开始时停止播放。原因可能是其他原因,但我想知道 SDL 和 Reactive-Banana 之间是否存在一些我不理解的奇怪交互。我一直试图解决这个问题一段时间,但这可能只是我忽略的一些简单的事情。提前致谢。下面是一个简单测试的代码:
编辑:问题似乎不一定在于 Reactive Banana。任何形式的“永远”循环都会导致音频停止。
haskell - 为什么反应香蕉中没有从非事件中构建事件的函数?
我正在自学 FRP 和 Reactive-banana,同时编写我希望对跟随我的人更有用的教程。你可以在这里查看我的教程进度。
我一直在尝试使用事件来实现简单的哔哔声示例。我知道我需要做这样的事情:
在我的NetworkDescription
,但我不知道如何让网络重复做同样的事情,或者做一次。理想情况下,我正在寻找这样的东西:
上面的Time
类型只是我们最终使用的任何时间测量的替代品。我是否需要将系统时间作为行为来驱动“延迟”功能?这似乎比必要的复杂。
提前致谢,
回声诺兰
编辑:好的,repeatWithDelay 和 concatWithDelay 的类型没有意义。这就是我真正的意思。
haskell - 如何在反应香蕉中实现游戏循环?
这个问题专门针对具有物理和视觉组件(例如游戏)的反应性香蕉和实时模拟。
根据修复您的时间步长!设置游戏循环的理想方式(假设物理需要可重现),您需要帧之间的固定时间步长。在考虑了一些真正的复杂性之后,作者得出了这个游戏循环:
概要是物理模拟总是以相同的时间增量 ( dt
) 为数值稳定性。安排这一点必须考虑到物理和视觉效果可能会以不同的频率更新,并且您不想落后太远。
例如,您可能希望以 20hz 的频率进行更新,但以 60hz 的帧速率进行视觉更新。该循环对物理场进行线性插值,以弥补物理场更新和图形更新之间的差异。
此外,当帧之间的时间差远大于dt
有一个循环来处理以dt
. 关于死亡螺旋的注释只是指您的物理计算根本无法跟上所需的更新频率的情况,因此您允许它跳过一些更新。
对于本次讨论,我最感兴趣的部分是安排对物理引擎的调用(对 的调用integrate
)总是由dt
. reactive-banana是否允许用户编写这种样式循环?如果有怎么办?也许一个做实时物理模拟的例子是有序的(或已经存在的)?
haskell - 功能性 Banana Traveler - 输入处理
这是我的Traveler项目的一个子问题。
我已经将处理输入的粗略代码放在一起。它有效,直到我将 a 引入TChan
混合中。下面是工作代码,以及如何使用它的示例。然后,我将对其进行更改并解释我这样做的原因。然后,我会谈谈这个问题。
执行以下操作ghci
将证明这是有效的。
所以,现在我已经有了基本的机制,我想开始构建它。这将是一款多人游戏。就输入处理而言,解决此问题的第一步是从TChan
. 想法是,所有玩家都将写入 this TChan
,并且每个命令将按照到达的顺序进行处理。
所以我添加了一个新函数'inputFrame'
这是我尝试使用它的方式,在ghci
.
output.txt
不被写入。commandChan
正在阅读,因为我检查它是否在填充后变为空。我做错了什么很明显吗?如果没有,我该如何解决问题?另外,出于我的预期目的,这是一个TChan
正确的选择吗?
haskell - 功能性香蕉旅行者 - 将 Behavior t GameState 放在一起
问题是我不知道如何创建类型的行为Behavior t GameState
我有更多的代码,但我只是想展示我认为有必要谈论这个问题的内容。让我知道是否有空白要填写。这就是我所拥有的:
和活动网络
我相信 bGameState 需要使用 eCommandChange,但我遇到了类型问题
这让我相信我需要转换eInput :: Event t PlayerCommand
成 a
eGameState :: Event t GameState
,我可以用它stepper
来制作Behavior t GameState
所以,我的问题是,我的思路正确吗?如果没有,我可以重新定向吗?如果是这样,eGameState :: Event t GameState
会是什么样子?
针对下面的回复。当我accumB
最初考虑时,我看到了一个类型错误。当我尝试你的建议时发生了什么。
产生错误
不知道该怎么做。我会看看你的例子,看看答案是否清楚。感谢您指出accumB
是正确的方法,因为我专注于stepper
我越研究建议的代码,我就越对类型错误感到困惑。
haskell - 功能反应香蕉型混淆
Heinrich Apfelmus慷慨地附和了这个问题。我曾考虑将accumB
其用作解决方案,但认为会有类型错误。无论如何尝试了他的建议后,我确实收到了一个类型错误。
所以我研究了(<$)
,并搞砸了部分应用程序。看了他建议的例子。我这样做的次数越多,我就越认为上面的代码应该可以工作,但我对它为什么不工作感到困惑。
这是我认为应该发生的事情:
因为(<$)
是类型(<$) :: a -> f b -> f a
并且 updateGS 是类型updateGS :: PlayerCommand -> GameState -> GameState
并且eInput
是类型Event t PlayerCommand
那么不应该updateGS <$ eInput
屈服
Event t (GameState -> GameState)
?
我的推理在某个地方有缺陷,有人可以指出哪里吗?
更新:当我尝试使用时,(<$>)
我收到以下错误
大纲.hs:158:21:
供参考,这是整个功能
user-interface - 使用 reactive-banana 处理相互递归的 GUI 小部件
我正在寻找一个库来在 GLFW 和 OpenGL 之上编写一个 GUI。我这样做是因为我对常见的 UI 库绑定感到不满意,我觉得这些绑定过于必要,而且我还希望严格控制我的 UI 的外观和感觉。我想要一种定义 UI 的声明性方法。我正在试验反应香蕉(和暂时反应香蕉wx),看看它是否满足我的需求。我在定义递归小部件时遇到问题。这是我最简单的测试用例:
- 显示计数器的文本小部件。
- 增加计数器的按钮小部件。
- 当计数器为 0 时处于非活动状态(因此它变灰并且根本不响应输入)的按钮小部件,否则处于活动状态并将计数器重置为 0。
第一个和第三个小部件具有递归关系。第一个小部件直观地是从两个按钮提供的事件之一stepper
。union
但是,重置按钮是fmap
计数器的一个,然后事件流依赖于重置按钮!什么是要做?
除了这个问题之外,我还担心事件处理:由于我想在我的代码中处理设备输入和输入焦点,而不是依赖于框架,因此我看到以可扩展方式正确调度事件的困难。理想情况下,我会定义一个data
封装小部件的层次结构的方法,一种在元素之间安装事件回调的方法,然后编写一个遍历该数据结构的函数,以定义设备输入处理和图形输出。我不确定如何获取事件流并将其拆分,因为可以合并事件流。
user-interface - wxHaskell 和 Reactive-Banana staticText 在文本更改时不更新大小
我正在尝试构建一个简单的 UI 作为学习 wxHaskell 和 Reactive Banana 的练习,但我在尝试解决一个看似简单的问题时遇到了困难。具体来说,我想在标签的文本更新时调整窗口大小以适应标签,使其始终适合文本。我尝试使用 来完成此操作windowReLayoutMinimal
,但这出乎意料地导致窗口在文本溢出时无法调整大小,并且在手动调整大小时窗口在其原始大小和新大小之间闪烁(即用句柄拉伸它角落)。据我所知,StaticText
当文本更改时,项目的大小无法更新。有没有办法强制项目重新计算其最小尺寸?我的代码如下所示: