我目前正在研究利用無功香蕉和SDL的小遊戲。由於目標主要是瞭解更多有關反應香蕉和FRP的知識,我嘗試使用動態切換來設置一系列遊戲對象,但目前尚未取得多大成功。無功香蕉動態事件切換
在Bartab示例中,我使用事件切換的唯一示例發現,最終觸發集合中新條目創建的事件是從事件網絡外部獲取的,而不是使用內部事件。我的問題是:這是做這件事的唯一方法,還是這個例子的特例?
在反應式香蕉中是否還有更多動態事件切換的例子?
從我所瞭解的我得到的瞬間t(任何時候行爲a)中,使用execute創建Event t(Anytime Behavior a),然後反過來用它來更新攜帶集合的行爲。 時刻t(任何時候行爲a)是使用觸發事件創建的行爲上的trimB創建的。如果此觸發事件來自事件網絡,則不會編譯錯誤消息「無法推斷(t〜t1)」。我不確定〜到底意味着什麼,但顯然會引發錯誤,因爲事件網絡的兩個Frameworks值(t)和這個新的Moment值是不同的。因此,長話短說,我不明白事件轉換在反應性香蕉的作品,我不知道爲什麼。理論上它應該相對簡單。
編輯:
-- 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)
[...]
我只是試圖從示例鏡像newEntry/eNewEntry,只是使用普通的事件來創建新的行爲。這會在spawnPos中產生「無法推斷(t〜s)」的錯誤。
EDIT2:
它的工作原理,但現在同樣的錯誤出現在哪裏我使用的執行創建該事件的線。 「無法演繹T〜T1」
我想可能有很大的幫助,如果您發佈的示例代碼無法編譯? – 2013-03-02 08:36:46
我用代碼示例更新了問題。 – AsgarZigel 2013-03-02 10:31:58