[英]Haskell IdleCallback too slow
我刚刚开始在haskell中设计一些图形。 我想创建一个带有旋转球体的动画图片,因此我创建了一个IdleCallback函数来不断更新角度值:
idle :: IORef GLfloat -> IdleCallback
idle angle = do
a <- get angle
angle $= a+1
postRedisplay Nothing
每次给角度加1,是因为我想使球体平滑旋转,而不是仅仅从此处跳到那里。 问题在于现在它旋转太慢。 有没有办法使旋转平稳并使其更快?
非常感谢!
这里没有很多事情要做。 我在任何地方都没有看到明显的延迟,所以我猜测它的速度很慢是因为更新需要多长时间?
它看起来也不是明确的递归,因此问题似乎不在此代码段的范围内。
而且我也不知道您可能正在使用哪些库。
但是,总的来说, IORef
使我感到不高兴。 尽管在其他语言中通常会使用全局变量, IORef
Haskell中的IORef
占有一席之地,但通常是一个不好的信号。
即使使用另一种语言,我也不认为我会使用全局变量来做到这一点。
如果要在Haskell中进行时间更新,一种“常用”方法是使用功能性反应式编程库。
它们的构建具有一系列功能,这些功能可以触发来自外部的信号,从而修改某些物体的状态,最终呈现输出。
过去,我曾将它们用于(简单的)游戏,在您的情况下,您可以构建一个每秒24次或以每秒24次反馈时钟信号的系统,并使用该系统更新计数器并生成新图像以块传送。
我的回答有点含糊,但是问题也有点含糊,因此希望我至少给了您一些建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.