【发布时间】:2009-08-26 09:21:25
【问题描述】:
我通过限制自己不使用 set! 来学习 Gambit-C Scheme 中的一些函数式编程。我认为使用这种环境编写一个小 OpenGL 游戏可能会很有趣,这似乎很适合游戏开发。
但是,在使用 OpenGL 和 GLUT 时,似乎很难坚持函数式风格并避免全局状态。我认为这本身并不是游戏编程的基本限制,但基于回调的 API(如 GLUT)似乎不适用于函数式编程。
例如,我试图将世界想象成一个不断变化的状态向量流,它是时间步长和用户输入事件的交错列表的函数。这个想法似乎还可以,但是对于异步编程来说似乎并不容易。例如,我必须为 GLUT 的显示函数注册一个回调,它应该能够以某种方式访问此流中的“当前”项目。同时,没有什么可以通过从中获取来推动流向前。
理想情况下,我需要某种“外部”GLUT 的东西,这是一个主要功能,它以某种方式依赖于(可能是单子的)在某些时候执行的各种 GLUT 功能。如何围绕 GLUT 开发这种风格的游戏引擎,或者换一种方式来问,我怎样才能最成功地将 GLUT 与我的引擎隔离开来?是否可以让 GLUT 为外部程序生成这样一个交错的事件列表?例如,Haskell 如何处理这个问题?
【问题讨论】:
标签: events opengl scheme functional-programming