2013-06-19 21 views
6

誰もが反応型バナナFRPフレームワークを使用してコンピュータゲームを行っているようですので、私も試してみる必要がありました。しかし、初期の段階では、ゲームデータを反応性バナナBehaviorタイプと記述しようとしています。ビヘイビアに反応型バナナの他のビヘイビアを含める方法

基本的には、私はゲームキャラクター(FrodoやSamなど)のリストを変更しようとしています。ゲームのキャラクターは、すべてのゲームのティック(ティックイベントとしてモデル化される)で更新されるかもしれません。その考えは、ゲームキャラクターが変更されるたびに、単一のEvent (Character)がトリガーされ、キャラクターの更新が最終的にネットワークを介して送られるということです。これの利点は、Asteroids.hsの例と比較して、ゲームの全状態(ゲームキャラクタの全リスト)がネットワークを介して送信される必要がないことである。なぜなら、ゲームキャラクターリストを持つ単一のイベント。

これは正常に動作します。 Behavior (Character)mapaccumで作成し、文字が更新されたときに文字の更新信号が送信されるようにしました。私が解決できない問題は、ゲームのキャラクタのリストBehaviorでこれを動作させる方法です。

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

答えて

5

動作の動的収集を管理するには、動的イベント切り替えを使用する必要があります。デモンストレーションについては、BarTab.hsの例を参照してください。

しかし、動的なイベントの切り替えは扱いにくいことがあり、回避することは可能です。一般的な状況は次の2つです。

  1. 動作の集合は静的にわかります。 TwoCounters.hsは、いずれかの挙動に応じて値を計算するために、単に適用可能なファンクションコンビネータを使用することができることを実証している。
  2. 動的コレクションは、一連の動作([Behavior a])ではなく、コレクション(Behavior [a])の動作としてモデル化できます。 Asteroids.hsの例では、これを使用する方法を示しています。これはスタイリスティックなトレードオフです。コレクションの個々のエントリをFRPで処方することはできませんが、コレクションの管理が容易になります。
+1

私はこれが事実であることが判明したと思っていました。私はあなたが言及し、後で外に変更されていない文字をフィルタリングする方法 "コレクションの動作"を試してみると思います。 – ipuustin

+0

特に、キャラクターリストが更新されたイベントを1つの文字を更新するためのいくつかのイベントに分割するために 'spill'関数を使用すると思います。 – ipuustin

関連する問題