Haskell IdleCallback太慢了

时间:2015-11-23 00:07:25

标签: haskell idle-processing

我刚刚开始在haskell中设计一些图形。我想用旋转球体创建一个动画图片,所以我创建了一个IdleCallback函数来不断更新角度值:

idle :: IORef GLfloat -> IdleCallback
idle angle = do 
  a <- get angle
  angle $= a+1
  postRedisplay Nothing

我每次都给角度加1,因为我想让我的球体平滑旋转,而不是从这里跳到那里。问题是现在它旋转太慢了。有没有办法保持旋转平滑并使其更快?

非常感谢!

1 个答案:

答案 0 :(得分:1)

这里不是很多。我没有在任何地方看到明显的延迟,所以我猜测它因为更新需要多长时间而变慢?

它也看起来不是显式递归的,所以看起来这个问题超出了这段代码的范围。

另外,我不知道您可能正在使用哪些库。

但总的来说,IORef让我感到不快乐。 虽然在其他语言中使用全局变量可能很常见,但Haskell中的IORef有它们的位置,但通常是一个不好的标志。

即使是另一种语言,我也不认为我是用全局变量做的。

如果你想在Haskell中做一些时间更新的事情,那就是常见的&#34;方法是使用Functional Reactive Programming库。

它们被构建为具有触发来自外部的信号的函数链,修改某事物的状态,最终呈现输出。

我过去曾经在(简单)游戏中使用它们,在你的情况下,你可以构建一个每秒钟24次或其他任何时钟信号的系统,并使用它来更新计数器和产生一个新图像到blit。

我的回答有点模糊,但问题也有点模糊,所以希望我至少给你一些东西可以研究。