我通过限制自己不使用 set! 来学习 Gambit-C Scheme 中的一些函数式编程。我认为使用这种环境编写一个小 OpenGL 游戏可能会很有趣,这似乎很适合游戏开发。

但是,在使用 OpenGL 和 GLUT 时,似乎很难坚持函数式风格并避免全局状态。我不认为这是游戏编程本身的基本限制,但是基于回调的 API(例如 GLUT)似乎不适用于函数式编程。

例如,我试图将世界视为一个不断变化的状态向量流,它是时间步长和用户输入事件的交错列表的函数。这个想法似乎没问题,但是异步编程似乎并不容易。例如,我必须为 GLUT 的显示函数注册一个回调,它应该能够以某种方式访问​​此流中的“当前”项目。同时,没有什么可以通过从中获取来插入流向前发展。

理想情况下,我需要某种“外部” GLUT 的东西,一个主要的函数,它以某种方式依赖(可能是单一的)在某个时候执行的各种 GLUT 函数。如何围绕 GLUT 开发这种风格的游戏引擎,或者另一种方式是我如何才能最成功地将 GLUT 与我的引擎隔离?是否有可能让 GLUT 为外部过程生成这样一个交错的事件列表?例如,Haskell 如何处理这个问题?

最佳答案

您将很难实现功能性图形系统。甚至 Haskell 对 GLUT 的绑定(bind)也使用命令式编程,通过 IO monad。我听说过的最接近你想要做的事情是 Functional Reactive Programming ,但图书馆还没有准备好迎接黄金时段,而且严重缺乏现实世界的教程。

关于events - 功能性过剩?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1331595/

10-11 22:35