我想为我的游戏管理输入的方式是轮询 TChan,然后在 eTick 发生时创建一个事件。但我尝试的方式会奏效吗?
data UAC = UAC (AID,PlayerCommand) deriving Show
makeNetworkDescription :: forall t . Frameworks t =>
TChan UAC ->
AddHandler () ->
TChan GameState ->
Moment t ()
makeNetworkDescription commandChannel tickHandler gsChannel = do
eTick <- fromAddHandler tickHandler
bCChannel <- fromPoll $ grabCommands commandChannel
let eCChannel = bCChannel <@ eTick
...
reactimate ...
grabCommands :: TChan UAC -> IO [UAC]
grabCommands unval = do
(atomically $ readTChan unval) `untilM` (atomically $ isEmptyTChan unval)
来自fromPoll
“输入,通过频繁轮询可变数据(例如当前时间)来获取行为。每当事件网络处理输入事件时,都会更新生成的行为”的文档。
我是否正确理解这一点?Tchan 是从其他代码中填充的,然后eTick
我每次清空它并得到另一个Event t [UAC]
?
也许我的理解是错误的,或者这种计算对于 fromPoll 来说太昂贵了。在这种情况下,更好的方向是什么?