繁体   English   中英

Haskell IdleCallback太慢

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM