問題タブ [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.
haskell - Netwire - 位置、壁の跳ね返りを生成するワイヤを構築する方法は?
質問のタイトルが示すように、他のオブジェクトから「跳ね返る」位置を生成するワイヤを作成しようとしています (各ステップで特定の速度で位置を移動します)。私が考えることができる最も単純な例は、いくつかのスクリーン セーバーのように、ボックス内を移動することでした。
私はまさにそれを行う試みとしてこの関数を書きました(1つの軸のみ):
(実際には別のモナドで使用していますが、このコードは実際には使用しておらず、ここでの問題を過度に複雑にします)。
しかし、それを踏むとcounterSession $ 1/60
、問題が発生します-壁から「跳ね返る」のではなく、そこで立ち往生します。何が起こるかは、速度が何度も反転し続けることだと思いますが、そのv
理由はわかりません. 遅延を間違って使用している可能性があると思います。
haskell - Netwire 相互依存ワイヤ
Netwire を試すために、ライブラリを使用して Pong を実装しています。コードには、ボール ワイヤとコンピュータ パドル ワイヤがあります。それらはいくつかの値で相互に依存しているため、無限ループの問題が発生しています。説明する擬似コード:
注目すべきことは、それらがお互いを入力として取っていることです。私は次のことを行うことでこれを軽減しようとしました:
これらの2つのワイヤで関数を使用する他のバリエーションdelay
ですが、<<loop>>
実行時エラーが発生します。
このシステムが機能するように、ワイヤの 1 つを初期化するにはどうすればよいですか?
haskell - ゲームを実装するときにプッシュプルFRPは役立ちますか?
ゲームの実装において、プルのみの FRP (ネットワイヤ) とプッシュプル FRP (リアクティブ バナナ) を比較してきました。お互いに利点はありますか?私が気づいたことは次のとおりです。
- プッシュ イベントにより、GLFW または GLUT からのマウス クリック/キー プレスのイベントを簡単に作成できます。
- netwire が使用する矢印化された FRP は
IO
、浮遊がはるかに少なく、常に優れています。 - マウスの動きなどに対してプルのみの応答を行うと、タイム リークが発生する可能性があるようです。
私は他に何を逃しましたか?
編集して、これを意見に基づかないようにします。主な目標は、時間の漏れなく、できるだけ表現力豊かで簡潔なものにすることです。
更新:私が Netwire で見つけた大きな問題は、記事「Fix your Timestep」で説明されているように、複数のフレームレートを使用する便利な方法がないように思われることです。
更新 2:これを回避する方法は、ゲーム シミュレーション ワイヤFloat -> IO ()
がアルファ値を取得し、そのアルファによって補間されたすべてのものですべての GL 呼び出しを実行する a を返すようにすることです。理想的には、この「描画関数」を を介して別のスレッドに渡しMVar
、そのスレッドで実行できるようにする必要があります。男、Haskellは素晴らしいです。
更新 3:この質問をしてから 6 か月間で、Netwire と「エンティティ コンポーネント プログラミング」の概念に基づく単純なレンダリング エンジンを開発しました。このプロセスでは、FRP の使用が非常に役立つとは思いませんでした。sの表現力は、Wire
実際には状況によっては妨げになることがわかっています。問題は、オブジェクトの「アイデンティティ」に集中しています。の値を定義するときWire
つまり、ネットワーク全体で複数回再利用され、毎回異なる物理的なものを表す可能性があります。衝突検出のようなことをしたいが、シーン グラフをトラバースする方法がない場合、これは非常に苦痛です。シーン グラフは単一の不透明なワイヤに融合されなければ存在できないからです。この問題は、「おもちゃ」の例では発生しません。これは、どのオブジェクトのどのプロパティが他のどのオブジェクトとどのように相互作用するかを正確に指定するのは簡単だからです。これはどちらのFRPにも問題があると思います。
Haskell のウィザードがこれについて私が間違っていることを証明してくれたら最高ですが、実際にはそれを回避する方法がわかりません。また、説明が下手で申し訳ありませんが、自分で試してみないと簡単には理解できません。
haskell - FRPにおける「今の行動」
以前の SO の質問 ( Is it possible?: Behavior t [Behavior ta] -> Behavior t [a] ) では、(用語Behavior
join
を使用するために) a の存在を分析していました。reactive-banana
次のようにセマンティック モデルに実装されます。
これを直接実装するのは残念ですが、Behavior
Monad
使用してconst
andを生成できるため、 FRP のセマンティクスに違反するbehaviorNow
場合、およびどのように違反しますか?behaviorNow
他の FRP システムの用語を使用した回答と、意味がある場合の比較を聞きたいです。
haskell - リスト内のすべての要素をリスト内の他のすべての要素とワイヤリング/アローループする
以前、この件について質問したことがありますが、私が何を尋ねているのか本当にわかっていなかったと思います。私は自分の問題を少しよく理解していると思います。
私は矢印化された FRP ライブラリである netwire を使用していますが、この矢印ループを実装するのに問題があります。
私は持っている
g
基本的に、指定されたリスト内のすべての要素を他のすべての要素のリストと ...um... を使用して結び付けます...これf
は言葉を使用して実際に言うのは難しいので、長さ 4 のリストの例を示します。
(私はヘルパー関数を持っています、それはのselects :: [a] -> [(a,[a])]
ようなものをに変え[x,y,z]
ます[(x, [y,z]), (y, [x,z]), (x, [x,y])]
)
今...私はこのハードコードされたバージョンをコンパイルしましたが、これはすでに機能しており、私が最も望んでいた結果を正確に提供します. ファンキーな <> 問題なしで実行されます。
この「正確な」ことを行うことが可能かどうかは誰にもわかりませんが、一般的な数のリスト要素を使用しますか?
参考までに、私の実装はselects
Simon Marlowによるものです。