问题标签 [netwire]

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 回答
288 浏览

haskell - Netwire 中的跳跃机制

我想我需要一些激励来了解如何制作这个,我在一般平台游戏机制方面并没有真正的经验......

无论如何,我的玩家身材到现在为止是这样的:

随着gravity,玩家对象慢慢下落,直到有东西可以站立。当然,下一步是在sin曲线中添加跳跃……添加它的简单方法是什么netwire?还可以添加进一步的碰撞检测吗?

我只是不知道从哪里开始。

0 投票
1 回答
154 浏览

haskell - 使用 Netwire 从值生成列表

我认为我从根本上误解了如何使用 Netwire 解决此类问题:

我有以下测试用例:

我想拿一个字符串,把它分成几行,打印每一行,然后退出。

我缺少的部分是:

  • 如何在管道中的早期值之后禁止,但是如果该值被拆分并且稍后产生结果,则在所有这些结果被消耗之前不禁止。
  • 主循环函数应该是什么样子
  • 如果我应该使用“一次”

这是我到目前为止的代码:

这将输出以下内容:

然后退出。如果我删除once,则程序按预期执行,永远重复输出完整的行列表。

我想要以下输出:

我敢肯定,我只是在这里缺少一些关于使用 Netwire 解决此类问题的正确方法的直觉。

0 投票
2 回答
241 浏览

haskell - Netwire - 如何构建产生位置,墙壁弹跳的电线?

使用netwire-4.0.7

正如问题标题所说,我正在尝试创建一条产生位置的线(在每一步中以一定的速度移动位置),“反弹”其他物体。我能想到的最简单的例子是在一个盒子里移动,就像在一些屏幕保护程序中一样。

我写这个函数是为了尝试做到这一点(仅适用于一个轴):

(我实际上将它与不同的 monad 一起使用,但这段代码实际上并没有使用它,它会使这里的问题过于复杂)。

counterSession $ 1/60然而,我遇到了一个问题——它没有从墙上“弹起”,而是卡在了那里。我认为发生的情况是它不断地翻转速度v,但我不知道为什么。我想我可能使用延迟错误或其他东西。

0 投票
1 回答
202 浏览

haskell - Netwire mutually dependant wires

To try out Netwire, I'm implementing Pong using the library. In the code I have a ball wire and a computer paddle wire, and since they depend on each other for some values I've been running into issues with infinite loops. Some pseudo-code to explain:

The thing to notice is they take each other for inputs. I've tried to alleviate this by doing the following:

and other variations of using the delay function in these two wires, but I'm getting the <<loop>> runtime error regardless.

How do I initialize one of the wires so that this system can work?

0 投票
3 回答
294 浏览

haskell - Haskell Netwire - Type errors

I have just started using netwire and I'm having trouble with the very basics.

The following code works fine for me:

But this does not:

fails with error:

So I changed it to:

which gives me the error:

Changing it to:

Gives the following error:

Can someone explain why this happens and how I can fix my second code example?

0 投票
1 回答
1223 浏览

haskell - 推拉式FRP在实现游戏时有帮助吗?

在游戏的实现中,我一直在比较仅拉式 FRP(即 netwire)和推拉式 FRP(即反应式班纳纳)。一个比另一个有优势吗?我注意到的事情是:

  • 推送事件可以轻松地从 GLFW 或 GLUT 获得鼠标点击/按键事件
  • netwire 使用的带箭头的 FRP 的IO浮动要少得多,这总是更好。
  • 看起来对鼠标移动之类的事情只有拉动响应可能会导致时间泄漏。

我还错过了什么?

编辑,以减少基于意见的内容:主要目标是尽可能表达/简洁,没有时间泄漏。

更新:我发现 Netwire 的一个大问题是似乎没有一种方便的方法来拥有多个帧速率,如“修复你的时间步长”一文中所述。

更新 2:我解决这个问题的方法是让我的游戏模拟线返回 a Float -> IO (),它采用 alpha 值,并使用该 alpha 插值的所有内容执行所有 GL 调用。理想情况下,我应该能够通过 an 将此“绘图函数”传递到另一个线程MVar并在该线程中运行它。伙计,Haskell 很棒。

更新 3:在提出这个问题后的六个月里,我基于 Netwire 和“实体组件编程”的概念开发了一个简单的渲染引擎。在这个过程中,我实际上并没有发现使用 FRP 非常有帮助。在某些情况下,s的表现力Wire实际上已成为一种障碍。问题集中在对象的“身份”上。当定义一个值时Wire类型,它没有身份,即它可以在整个网络中多次重复使用,并且每次代表不同的物理事物。当您想要执行诸如碰撞检测之类的操作并且无法遍历场景图时,这是一个巨大的痛苦,因为如果不融合成一条不透明的线,它就无法存在。这个问题不会出现在“玩具”示例中,因为很容易准确地指定哪些对象的哪些属性与哪些其他对象以何种方式交互。我相信这是任何一种 FRP 的问题。

如果某个 Haskell 向导能证明我在这方面是错误的,那就太棒了,但我真的没有办法绕过它。如果解释不是很好,我也很抱歉,但如果不亲自尝试,它并不是那么容易理解。

0 投票
2 回答
394 浏览

haskell - FRP 中的“现在行为”

在之前的 SO 问题(Is it possible?: Behavior t [Behavior ta] -> Behavior t [a])中,我们正在分析 a 的存在Behavior join(使用reactive-banana术语)。

在语义模型中实现如下

虽然直接实现这将是不幸的,因为我们可以产生一个Behavior Monadusing constand behaviorNow,如果以及如何behaviorNow违反 FRP 的语义?

我很想听到使用任何其他 FRP 系统的术语以及有意义的比较的答案。

0 投票
1 回答
94 浏览

haskell - Wiring/ArrowLooping every element in a list with every other element in the list

I asked a question about this earlier but I don't think I really knew what I was asking. I think I understand my problem slightly better now.

I'm using netwire, an arrowized FRP library, and having some trouble getting this arrowloop implemented.

I have

Such that g basically ties every element in the given list with the list of every other element using f...um...this is hard to really say using words so I'll give an example with a list of length 4:

(I have a helper function selects :: [a] -> [(a,[a])], that turns something like [x,y,z] into [(x, [y,z]), (y, [x,z]), (x, [x,y])])

Now...I've compiled this hard-coded version and this already works and delivers exactly the results that I wanted mostly. It runs without any funky <> issues.

Does anyone know if it's possible to do this "exact" thing...but with a general number of list elements?


For reference, my implementation of selects comes from Simon Marlow,

0 投票
2 回答
495 浏览

haskell - Netwire 5 - 墙壁的弹跳物体

我正在尝试了解 FRP 和 Netwire。我最好的实践知识来源是这篇文章,但是它有点过时了,因为它是用 Netwire 4 编写的,而且我使用的是 5.0 版。我想要玩家控制的正方形,它会从屏幕边缘反弹。

根据那篇文章,我有这个:

我希望位置线整合速度,纠正位置以保持在屏幕范围内并产生 Bool 指示发生碰撞。链接文章使用 accumT,在当前版本的 Netwire 中,(AFAIK)已经消失。而且它不太漂亮 - 当有一根电线时手动集成......我知道,我可以使用integralWith限制位置,但它只能产生分数。我试过这样:

请原谅我;)。现在我知道整线有一个内部状态,我不会这样修改。

那么实现我想要的“正确方法”是什么?

0 投票
2 回答
319 浏览

haskell - 获取 Netwire 程序的输入

我开始使用 Netwire 版本 5。

我可以毫无问题地编写我想将输入转换为输出的所有线路。

现在是时候编写 IO 包装器来绑定我的实际输入了,我有点困惑。

我是否应该为s参数创建一个自定义会话类型Wire s e m a b并将我的传感器值嵌入其中?

如果是这样,我有这些问题:

  1. Monoid s上下文是class (Monoid s, Real t) => HasTime t s | s -> t怎么回事?它是干什么用的?
  2. 我正在考虑Map String Double用我的传感器读数添加一个,但是我的幺半群应该如何处理字典呢?应该偏左吗?偏右?以上都不是?

如果没有,我该怎么办?Wire s InhibitionReason Identity () Double我想以some形式的线结束s,代表我的输入。

我的理解是,我不想或不需要为此目的使用 monadicm参数Wire,允许线路本身是纯的,并将 IO 限制在通过顶层线路的代码中。这是不正确的吗?