Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 在Haskell/Yampa和HOOD中调试游戏对象的输出_Debugging_Haskell_Game Engine_Yampa - Fatal编程技术网

Debugging 在Haskell/Yampa和HOOD中调试游戏对象的输出

Debugging 在Haskell/Yampa和HOOD中调试游戏对象的输出,debugging,haskell,game-engine,yampa,Debugging,Haskell,Game Engine,Yampa,我一直在使用Haskell/Yampa(=箭头)(带引擎盖)为游戏对象生成调试输出 我的引擎基本上运行一个游戏对象列表,这些对象生成输出状态(直线、圆),然后进行渲染 data Output = Circle Position2 Double | Line Vector2 output :: [Output] -> IO () output oos = mapM render oos render :: Output -> IO () render (Circle p r) =

我一直在使用Haskell/Yampa(=箭头)(带引擎盖)为游戏对象生成调试输出

我的引擎基本上运行一个游戏对象列表,这些对象生成输出状态(直线、圆),然后进行渲染

data Output = Circle Position2 Double | Line Vector2

output :: [Output] -> IO ()
output oos = mapM render oos

render :: Output -> IO ()
render (Circle p r) = drawCircle p r
render (Line   vec) = drawLine (Point2 0 0) vec
玩家对象只是向右移动,并表示为一个(定位的)圆

playerObject::SF()输出——SF是按时间运行的箭头
p velocity->position),我希望观察速度并将其作为调试输出渲染为(未定位)行

mover::Position2->SF Vector2 Position2
移动器位置0=过程加速->执行

速度我不知道,但是调试。跟踪很容易:

导入调试跟踪

>移动器位置0=proc加速度->do

>速度>位置>>>>>>>(位置0.+^>返回A-


请注意,不应将其放在定义速度的行上。

您可能希望做的是使移动器更灵活,以支持添加带外调试信息(要呈现的
velocity
)。我认为HOOD与您的问题无关,因为您已经有了处理不断变化的值的FRP框架。只需安排输出速度即可

比如:

mover :: Position2 -> SF Vector2 (Position2, Vector2)
mover position0 = proc acceleration -> do
    velocity <- integral -< acceleration -- !! I want to observe velocity
    position <- (position0 .+^) ^<< integral -< velocity
    returnA -< (position, velocity)

playerObject :: SF () [Output]
   (p, v) <- mover (Point2 0 0) -< (Vector2 10 0)
   returnA -< [Circle p 2.0, Line v]
mover::Position2->SF Vector2(Position2,Vector2)
移动器位置0=过程加速->执行

velocity这并没有提供图形输出,只是控制台上的文本,一般来说有点有限。有时,你真正需要的只是
取消性能打印调试
,但我认为提问者的目的不止于此。更改和破坏界面正是我想要避免的。函数的签名应该保持不变,但是函数体中的数据流之间有一些额外的注释,这些注释与外部系统通信并以视觉样式呈现。与GHood类似,但具有交互式程序能力。如果您不介意重新计算(不幸的是,Yampa原则上应该能够避免这种情况,但事实并非如此),您可以将Velocity计算分解为其自己的标识符,然后从顶层访问它。或者,您可以远距离执行一些不安全的操作,将相关位传播到顶层。
mover :: Position2 -> SF Vector2 Position2
mover position0 = proc acceleration -> do
    velocity <- integral -< acceleration -- !! I want to observe velocity
    position <- (position0 .+^) ^<< integral -< velocity
    returnA -< position
mover :: Position2 -> SF Vector2 (Position2, Vector2)
mover position0 = proc acceleration -> do
    velocity <- integral -< acceleration -- !! I want to observe velocity
    position <- (position0 .+^) ^<< integral -< velocity
    returnA -< (position, velocity)

playerObject :: SF () [Output]
   (p, v) <- mover (Point2 0 0) -< (Vector2 10 0)
   returnA -< [Circle p 2.0, Line v]