2013-03-01 4 views
9

私は現在、反応性バナナとSDLを利用した小さなゲームに取り組んでいます。目標は主に反応性のバナナとFRPの詳細を学ぶことなので、動的な切り替えを使用してゲームオブジェクトの集合を設定しようとしましたが、これまでのところ大きな成功はありませんでした。リアクティブバナナでのダイナミックイベントスイッチング

私が見つけたイベント交換を使用する唯一の例では、内部イベントを使用するのではなく、イベントネットワークの外側からコレクションの新しいエントリの作成を最終的に引き起こすイベントが取得されます。私の質問です:これを行う唯一の方法ですか、この例のための特別なケースですか?

リアクティブバナナで使用されている動的イベント切り替えの例はありますか?

モーメントt(任意のビヘイビアa)を取得するには、executeを使用してイベントt(任意のビヘイビアa)を作成し、次にコレクションを保持するビヘイビアを更新するために使用します。 モーメントt(任意のビヘイビアa)は、トリガイベントから作成されたビヘイビアでtrimBを使用して作成されます。このトリガーイベントがイベントネットワークで発生した場合、「Could not dedus(t〜t1)」というエラーメッセージとともにコンパイルされません。私は〜が何を意味するのかよく分かりませんが、イベントネットワークの2つのフレームワーク値(t)とこの新しいモーメント値が異なるため、明らかにエラーをスローします。

短いストーリーで、私はリアクション・バナナのイベント・スイッチングがどのように機能しているのか分かりません。理由はわかりません。それは理論的には比較的簡単であるはずです。

編集:私は単純に新しい動作を作成するために、通常のイベントを使用して、例からnewEntry/eNewEntryを反映しようとした

-- Event Network 
-- ========================== 
setupNetwork :: forall t. Frameworks t => (EventSource Command, EventSource()) -> IORef SpriteMap -> GameMap -> Moment t() 
setupNetwork ((addHandlerE, _), (addHandlerT, _)) sprites map = do 

     -- Input Events 
     ---------------- 
     eInput <- fromAddHandler addHandlerE -- Player Commands 
     eFrame <- fromAddHandler addHandlerT -- Event on each Frame 

     let 
      [...] 


      eSpawnEvent :: Event t (DSCoord) 
      eSpawnEvent = extractCoord <$> eLeftClick 
       where 
         extractCoord (LeftClick c) = c 

      spawnPos :: Frameworks s => Moment s (AnyMoment Behavior DSCoord) 
      spawnPos = trimB $ stepper (0,0) eSpawnEvent 

     eSpawnPos <- execute $ (FrameworksMoment spawnPos <$ eSpawnEvent) 
       [...] 

。これにより、spawnPosで「推論できません(t〜s)」というエラーが生成されます。

EDIT2:

それは動作しますが、今、同じエラーが、私は、イベントを作成するために実行使うライン上にアップしています。

コンパイラが正しくspawnPosは開始時間ながら時間sを開始(多型)があることを不平を言う:コードがマイナーな間違いを除き、基本的に正確であるように私には見える

+0

に問題のある行を変更することがありますか? –

+0

質問をコード例で更新しました。 – AsgarZigel

答えて

4

を「トン〜T1を推定できませんでした」 eSpawnEventの値はtに固定されています。後者の時間はsetupNetworkのタイプシグニチャーのforall t部分を介してスコープに入れられます。つまり、tは、ネットワーク全体の開始時刻を表します。

簡単な修正は、私はあなたがコンパイルされませんあなたの例のコードを投稿した場合、それは大いに役立つかもしれないと思う

spawnPos :: Frameworks t => Moment t (AnyMoment Behavior DSCoord) 
+0

ありがとう、それは助けたが、完全ではない。 – AsgarZigel

+0

ああ?私はより多くの情報を漏らしてうれしいです。 :-) –

+0

あなたがそれを見なかった場合に備えて、もう質問を編集しました。それでも同じエラーです。 – AsgarZigel

関連する問題