問題タブ [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 - リアクティブ バナナ ゲームの一般的な構造はどのようになりますか?
反復ごとにロジックを実行し、命令型言語で毎秒 60 回画面に描画する単純なゲームは、次のようになります。
それがどのようにリアクティブバナナに変換されるのかわかりません。
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 - プレーヤーをジャンプさせる方法 (y 速度を設定)?
以下を考えると:
ジャンプイベントが到着したときにプレイヤーをジャンプさせるにはどうすればよいですか (おそらく y 速度を設定することによって)。
haskell - 可能ですか?: 振る舞い t [振る舞い ta] -> 振る舞い t [a]
Behavior t [a]
時間 t での [a] の値が時間 t での a に含まれる値であるa を持つ方法はありBehavior t [Behavior t a]
ますか? つまり、次のタイプの関数:
これが不可能な場合、それは論理的な不可能性またはリアクティブ バナナの制限によるものですか?
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 - 反応バナナを使用した Haskell での音声合成
私は反応バナナを使い始めようとしていて、簡単なシンセサイザーを作りたいと思っています。GUI の例はたくさんありますが、オーディオに適用するのは難しいです。オーディオ API には「n 個のオーディオ サンプルを与えてください」というコールバックがあるので、コールバックごとに (newAddHandler が返すものの snd 部分を使用して) イベントを起動する必要があると考えます。 、および MIDI イベントを調整するためのタイミング情報。その後、再活性化に渡された IO アクションは、サンプルをポインターに書き込みます。MIDI イベントは、別のコールバックから同様に起動され、タイミング情報も含まれます。
しかし、これは私が立ち往生するところです。オーディオ信号は動作であると思われますが、サンプルを取得するために適切な時間だけ動作を「実行」するにはどうすればよいですか? もちろん、適切な量は、2 つのオーディオ コールバック間で発生する可能性のある MIDI イベントによって異なります。
haskell - FRP - イベント ストリームとシグナル - シグナルだけを使用すると失われるものは何ですか?
Classic FRP の最近の実装では、たとえばリアクティブ バナナには、ステップ関数であるイベント ストリームとシグナルがあります (リアクティブ バナナはそれらを動作と呼びますが、それでもステップ関数です)。Elm はシグナルのみを使用し、シグナルとイベント ストリームを区別していないことに気付きました。また、reactive-banana では、イベント ストリームからシグナルへの移行が可能です (編集済み: 良い習慣とは見なされていませんが、reactate を使用して動作に作用することは一種の可能性があります)。これは、理論的にはすべてのイベント ストリームを適用できることを意味します。最初にシグナルをイベントストリームに変換し、適用してから再度変換することにより、シグナル/動作のコンビネーター。したがって、一般に、1 つの抽象化だけを使用して学習する方が簡単であることを考えると、シグナルとイベント ストリームを分離する利点は何ですか? シグナルのみを使用し、すべてのイベント ストリーム コンビネータをシグナルで動作するように変換することで何かが失われますか?
編集:議論は非常に興味深いものでした. 私自身の議論から得た主な結論は、動作/イベント ソースは、相互に再帰的な定義 (フィードバック) と、出力が 2 つの入力 (動作とイベント ソース) に依存するものの両方に必要であるが、1 つの場合にのみアクションを引き起こすということです。それらの変更 (<@>)。
haskell - Haskell (reactive-banana) の Paths.getDataFile はどこにありますか?
アニメーションを含む例の1つを使用して、リアクティブバナナ0.8.0.0をテストしています
Paths
モジュールが見つからないというエラーが表示されます。問題の行は次のとおりです。
エラーは次のとおりです。
このモジュールの入手先やインストール方法を知っている人はいますか? (Windows XP 64 で mingw.org の Haskell Platform 2013.2 と mingw32 を使用しています)。