問題タブ [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 - Functional Banana Traveler - タイマーとプレイヤーに依存しないイベント

私はトラベラーで、プレイヤーに依存しないゲーム状態の更新を処理しようとしているところです。参考までに、プロジェクトはこちらです(この質問に関連するブランチはdevelブランチです)。

Libraries/Universe/GameState.hsupdateGSゲームの状態に対するすべてのプレーヤーの更新を処理する関数があります。今のEventNetwork姿はこんな感じ。

このタイマーを実装する際の問題は、私が見たすべての例が私の物理シミュレーションとは異なるユースケースを持っていることです。このゲームには物理演算は含まれていません。タイマーを使用して、プレーヤーのアクションとは無関係にゲームの状態を評価しようとしています。今のところ、私が管理したいのはハイパースペース旅行だけです. 完全に実装されると、ある惑星から別の惑星に移動すると、 が に変わりAgentます。ここで必要なことは、aが発生したときに1 ずつインクリメントすることです。すると if equalsの位置は になります。locationRight HyperspacetickdistanceTraverseddistanceTraversedtotalDistance AgentLeft Planet

EventNetworkでは、の視点からはどのように見えるでしょうか?

今すぐ行動を組み合わせる

これは正しい軌道ですか?

0 投票する
0 に答える
140 参照

haskell - Functional Banana Traveler - 壊れたタイプのミステリー

次のエラーが表示されます。

t0Eventt1Behavior問題の手がかりですが、この手がかりをどのように解釈すればよいかわかりません。それでは、いくつかのタイプ、誤ったコード、およびそれが機能する理由についての私の推論から始めましょう。

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. 2 つ目は である必要がありますEvent t (AgentMap -> AgentMap)。そこに着く方法?から始めるとupdateAgentMap <$> bHyperMap、タイプは になりますBehavior t (PlanetMap -> AgentMap -> AgentMap)。さて、もう 1 つのパラメータupdateAgentMap <$> bHyperMap <*> bPlanetMapで type を指定しますBehavior t (AgentMap -> AgentMap)。もうすぐですよね?

これを考える (<@) :: f a -> g b -> g a と、 eTick :: Event t ()

Iの代わりa(AgentMap -> AgentMap) これを行うことができるはずです (updateAgentMap <$> bHyperMap <*> bPlanetMap)<@ eTick

取得するためEvent t (AgentMap -> AgentMap)

しかし、それほど速くはありません。私の推論はどこかで失敗しているに違いありません。誰か教えてくれませんか?

更新: eTick が定義されていなかったために、この問題が発生したことが判明しました (と思います)。コードの多くを独自のファイルに分離しようとしました。eTick を離れるundefinedことは満足のいくものではないことはわかっていましたが、これについて何をしたいのかまだ考えていません。そのため、その間、コードを元のようにletバインディングに移動し始めました。これでコードがコンパイルされます。letバインディングがそこに長く留まることを望みません。私の期待は、ブレークアウトプロジェクトを再訪することで、コードをより適切に構造化する方法が示されることです。

0 投票する
1 に答える
242 参照

haskell - 反応バナナでビヘイビアに他のビヘイビアを含める方法

みんなリアクティブバナナFRPフレームワークでコンピューターゲームをやっているみたいなので、私もやってみました。ただし、ゲーム データをリアクティブ バナナ型として記述しようとして、初期段階に行き詰まっていBehaviorます。

基本的に、私はゲーム キャラクター (フロドやサムなど) の (変化する) リストを作成しようとしています。ゲーム キャラクターは、ゲーム ティック (ティック イベントとしてモデル化) ごとに更新される場合があります。ゲーム キャラクターが変更されるたびにシングルEvent (Character)がトリガーされ、最終的にキャラクターの更新がネットワーク経由で送信されるという考え方です。Asteroids.hsの例と比較した場合の利点は、ゲーム ステート全体 (ゲーム キャラクターの全リスト) をネットワーク経由で送信する必要がないことです。これは、単一のゲーム キャラクターを持つ多数のイベントが発生するためです。ゲーム キャラクター リストを含む単一のイベントの代わりに。

1 つのゲーム キャラクターの場合、これで問題なく動作します。Behavior (Character)withを作成してmapaccum、キャラクターが更新されたときにキャラクター更新シグナルが送信されるようにしました。Behavior私が解決できない問題は、これをゲーム キャラクターのリストで機能させる方法です。

Behaviorゲーム中にキャラクターが出入りする可能性があるため、ゲームキャラクターリストを としてモデル化しようとしています。ここで動的イベント切り替えを使用する必要がありますか? またはBehavior、個々のゲーム キャラクターを使用しない場合 (Behaviorゲーム キャラクター リストのみを使用する場合)、キャラクター リストを調べているときに条件付きで更新イベントをトリガーする方法はありますか? それとも、ここで何かを理解していませんか?

0 投票する
1 に答える
102 参照

haskell - Functional Banana Traveler - 入力 処理 : これは私が望むことをしますか?

ゲームの入力を管理したい方法は、TChan をポーリングし、eTick が発生したときにイベントを作成することです。しかし、私が試している方法は機能しますか?

data UAC = UAC (AID,PlayerCommand) deriving Show

fromPoll 「入力、現在の時刻などの可変データを頻繁にポーリングして動作を取得します。結果の動作は、イベント ネットワークが入力イベントを処理するたびに更新されます。」のドキュメントから。

私はこれを正しく理解していますか?TChannel は他のコードから取り込まれており、それeTickを空にして別のコードを取得するたびにEvent t [UAC]?

私の理解が間違っているか、この計算は fromPoll には高すぎるのかもしれません。その場合、どの方向に進むのがより良いですか?

0 投票する
1 に答える
211 参照

haskell - Functional Banana Traveler - tick イベントの何が問題になっていますか?

私は tick イベントを実装しようとしていますが、それが機能しないことを示す小さなテストを以下に示します。なぜそれが機能しないのかについての洞察をいただければ幸いです。

ここにいくつかのテストデータがあります。

上記を実行すると、Mainこの出力が得られます。

ファイルCommands.txtが存在することはありません。この問題は、ティックイベントの不良に起因すると考えています。

thisからタイマーの実装についてのアイデアを得ましたが、これについて間違った方法で考えているのだろうか。何か案は?

fromPoll編集:正しいことをしているという保証が欲しかった. 上記のテストを追加しました。

0 投票する
1 に答える
446 参照

haskell - 再帰的に自分自身に依存するリアクティブ バナナ動作を実装する方法は?

イベントの発生と動作の現在の値に基づいて値を変更したい動作があります。以下の例では、ブール値の動作が True であるか False であるかに基づいて更新される 2 つのカウンターがあります。このコードは<<loop>>例外でクラッシュしますが、再構築して機能させる方法や、この問題に対処する方法がわかりません。

0 投票する
3 に答える
139 参照

haskell - リアクティブバナナで重複イベントをフィルタリングする

私が持っているとしましょう

最初のコンポーネントを取得できます。

ただし、このイベントは、最初のコンポーネントが変更されていない場合でも発生します。コストのかかる再計算がトリガーされるため、これは避けたいと思います。

AのインスタンスでEqあるため、最初のコンポーネントが最後の値と比較して変更されていない連続したイベントを削除できるようにしたいと考えています。

理想的には、関数が欲しい

Momentモナドに頼らずにそれを行うでしょう。出来ますか?または、これを行うための最良の方法は何ですか?