【问题标题】:Simple Haskell graphics library? [closed]简单的 Haskell 图形库? [关闭]
【发布时间】:2020-12-05 04:40:19
【问题描述】:

我想尝试一下 Haskell,我希望编写一个小型 2D 街机游戏(俄罗斯方块或突围)。 你能推荐一个简单的图形库来帮助我快速入门吗?

顺便说一句,我一直在尝试使用 SDL 和 wxWidgets,但由于依赖问题,还没有成功运行任何示例,正在研究它...

【问题讨论】:

  • 下载 Cabal Install 非常重要。没有它,依赖管理是可怕的。
  • Cabal 很棒——你绝对应该下载它。但这并不能解决缺少底层原生库的问题。 Cabal 包中根本不包含许多库(例如 wxWidgets、OpenGL,可能还有 GTK)。
  • 我刚刚查看了 Haskell 的 GTK2HS,它确实包含完整的 GTK 堆栈(很好)。不幸的是,它没有 Cabal 包(不太好),它的安装程序需要 GHC 6.10.3。不是“6.10.3 或更高版本”——只是“6.10.3”。很容易解决,但仍然......:P
  • @Don Stewart:同意——另一个答案要好得多,以至于它取代了这里所说的一切。

标签: graphics haskell


【解决方案1】:

它并不完全是一个“简单”的库,但是网上有很多关于 OpenGL 和 GLUT 的信息,还有一些非常好的教程和大量的示例代码。

您遇到的最大问题是 Haskell 中的 OpenGL 和 GLUT 绑定不包括它们绑定到的库。 (对于 wxWidgets 也是如此。)许多 Linux 发行版都捆绑了 OpenGL 二进制文件,但 Windows 没有。 Haskell Platform 应该可以解决这个问题,但对我来说似乎没有。

所以,假设您在 Windows 上安装,我建议您尝试以下方法:

  1. 按照in this blog 的指示进行操作。它们很复杂——包括安装 MinGW、MSys 和手动编译 SourceForge 的 GLUT 项目,但这是我让 OpenGL 工作的唯一方法。我现在已经成功安装在三台不同的机器上,包括 XP 和 Vista,所以我可以肯定地说这些都是非常好的方向。
  2. 一旦成功,请查看这些two awesome 教程。他们真的让我看到了 Haskell 在图形方面的强大功能。您会发现所涉及的代码比您预期的要简单得多。
  3. 查看Haskell OpenGL page 上的示例游戏。它们是非常实验性的——这很好,因为这意味着比你在生产系统中发现的代码更少——但它们也出奇地复杂。 (是的,已经有不止一个简单的俄罗斯方块实现了,但不要让它阻止你。)
  4. 另一个很好的示例代码来源是 Haskell 的 GLUT 绑定本身。查找示例目录,您会发现许多来自 OpenGL 红皮书的示例代码端口。

OpenGL 是非常有状态的,所以如果您还没有完全理解 Monad,您可能会发现 Haskell 代码有点令人生畏。我正在使用我的 OpenGL 实验作为最终围绕这个概念来思考的动力。

祝你好运!

【讨论】:

  • OpenGL 状态都在 IO monad 中,因此练习可能有助于处理 monad 的基础知识,但在尝试推广到其他 monad 时无济于事,这些 monad 做的事情远比简单地保持跟踪世界的状态。
  • 不过,我并不想抱怨太多; OpenGL/GLUT 似乎是 OP 的一个良好开端,虽然它不是很像 Haskell。就我个人而言,我使用带有 GtkGlArea 绑定的 Gtk2Hs,因为它比原始 GLUT 更好,但是一旦你了解 OpenGL 本身,处理窗口的内容并不重要。
  • 我没有玩过 GTK。我首先让 wxWidgets 工作,所以我用它做了我的 UI 实验。但我现在会根据你的建议尝试一下。我同意你关于 monad 的观点—— IO monad 是一个相当乏味的野兽,但它是一个开始的地方。我的最终目标是逐步完成箭头,这样我就可以尝试使用 Yampa 进行一些反应式编程。现在所有的概念都在我脑海中浮现,但我开始将各个部分拼凑起来。
  • OpenGL配置中的配置步骤给我错误“无法为cygwin的堆保留空间”,显然这可能是由杀毒软件引起的。在我的计算机上禁用 Avast 似乎没有解决问题。耐心和毅力在这个小项目中得到了很好的训练......
  • 为了方便安装新版本,请查看openwires.blogspot.in/2012/10/…
【解决方案2】:

您是否仔细阅读过以下列表:

Haskell Graphics Libraries: 这里似乎有很多 OpenGL、SDL 和其他图形库的接口。

Haskell GUI: 这里也有一些 wxWidget 库。

【讨论】:

    【解决方案3】:

    Cairo 是用 C 语言编写的,但有 haskell 绑定,也许尝试一下可能是个好主意。我只使用过它的 python 绑定,但那些似乎运作良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多