作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个滴答事件,并在下面进行了一个小测试,证明它不起作用。我很想知道为什么它不起作用。
gameloop :: TChan UAC ->
IO ()
gameloop commandChannel = do
(tickHandler, tickSink) <- newAddHandler
networkDescr <- compile $ makeNetworkDescription commandChannel tickHandler
actuate networkDescr
forkIO $ forever $ (timer 10) >>= tickSink
return ()
makeNetworkDescription :: forall t . Frameworks t =>
TChan UAC ->
AddHandler () ->
Moment t ()
makeNetworkDescription commandChannel tickHandler = do
eTick <- fromAddHandler tickHandler
bCChannel <- fromPoll $ grabCommands commandChannel
-- test fromPoll
test <- initial bCChannel
liftIO $ appendFile "testPoll.txt" $ show test
-- end fromPoll test
let eCChannel = bCChannel <@ eTick
liftIO $ print "hi there\n"
reactimate $ (\n -> appendFile "Commands.txt" (show n)) <$> eCChannel
grabCommands :: TChan UAC -> IO [UAC]
grabCommands unval = do
result <- (atomically $ readTChan unval) `untilM` (atomically $ isEmptyTChan unval)
liftIO $ print $ show result
return result
timer :: TimeOut -> IO ()
timer ms = do
threadDelay ms
main :: IO ()
main = do
commandChan <- atomically $ newTChan :: IO (TChan UAC)
forkIO $ gameloop commandChan
liftIO $ print "back from fork\n"
atomically $ populateCC commandChan playerCommands
return ()
populateCC :: TChan UAC -> [UAC] -> STM ()
populateCC pChannel pCommands = mapM_ (writeTChan pChannel) pCommands
playerCommands =
[UAC (PlayerCommand (CommandData (T.pack "1" :: AID) Look) (T.pack "1")),
UAC (PlayerCommand (CommandData (T.pack "2" :: AID) (Move Mongo)) (T.pack "2"))
]
Main
我得到这个输出。
"back from fork\n"
"[UAC (PlayerCommand (CommandData \"1\" Look) \"1\"),UAC (PlayerCommand (CommandData \"2\" (Move Mongo)) \"2\")]"
"hi there\n"
Commands.txt
永远不会存在。我将此问题归因于错误的滴答事件。
fromPoll
做正确的事。我添加了上面的测试,它是。
最佳答案
在我看来,问题不在于滴答事件,而在于您将玩家命令建模为 Behavior
.
如果您从外延角度思考并想象行为是随时间变化的值 Behavior a = Time -> a
,以这种方式模拟玩家命令有意义吗?例如,3s
之间的时间范围内的玩家命令是什么?和 4s
?你给 fromPoll
的论点是什么?尊重这些语义?
问题是grabCommands
有一个严重的副作用:调用它会从 channel 中删除命令,因此它甚至不是幂等的。此外,它会在没有可用命令时阻塞。我认为这最终是滴答事件不起作用的原因:网络被阻止试图执行 fromPoll
行动。然而,潜在的问题更为深刻:建模玩家命令的正确方法是使用 Event
,不是 Behavior
.
关于haskell - Functional Banana Traveler - 我的滴答事件有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17323383/
有人知道R中的槽是什么吗? 我没有找到其含义的解释。我得到一个递归定义:“槽函数返回或设置有关对象的各个槽的信息” 帮助将不胜感激,谢谢 -胡同 最佳答案 插槽链接到 S4 对象。槽可以被视为对象的一
我有一个字符串“a.b”,我想替换“.”和 ”_”。 gsub(".","_","a.b") 不能作为 .匹配所有字符。 gsub("\.","_","a.b") 只是给我一个错误。 阅读 ?gsub
我是一名优秀的程序员,十分优秀!