我正在为此使用 OCaml SDL 开发一个小游戏。我没有找到任何关于它的文档,所以我有三个问题:
- 我想在windows下使用OCaml SDL,所以任何人都可以帮助我如何编译它,(我已经放弃并在虚拟PC上安装了linux)
- 有没有关于如何使用 OCaml SDL 的文档?
- 我正在使用一个 800x600 的窗口,我想在里面表示一些图形,例如那个像素表示背景,另一个表示岩石等等,那个(800x600)窗口的最佳表示是什么?作为一般情况,我使用的是 800 * 600 单元格的数组。
1 - 我想在windows下使用ocaml sdl,所以任何人都可以帮助我如何编译它,(我已经放弃并在虚拟PC上安装了linux)
你能让 SDL 在 windows 下工作并用它编译 C 程序吗?如果是这样,那么您应该开始阅读手册中有关使用 c 程序编译 ocaml 的章节。
2 - 有没有关于如何使用 OCAML SDL 的文档?
包中有文档。我想这不是最好的,因为在 ocaml 中真的没有一个包有像样的文档——我可以夸大其词,不是吗?
为了解决这个问题,您需要探索 SDL 中需要哪些函数,然后在 ocamlSDL 的源目录中的 MLI 文件中找到相应的函数。应该不会太糟糕。看起来它很有条理。我不得不用其他包来做这个。程序员有一些标准的命名约定,然后你真的只需要知道函数签名就可以了。
我会尽可能努力地假装您只是直接调用 SDL 来开展您的业务——在大多数情况下,这应该是那么容易。
3 - 我正在使用一个 800x600 的窗口,我想在里面表示一些图形,例如那个像素表示背景,另一个表示岩石等等,那个(800x600)窗口的最佳表示是什么?作为一般情况下,我使用 800 * 600 单元格的数组,我知道这是最丑陋的表示,但请提供任何建议
ocaml 中的 Hashtbl 非常有效——ocaml 实际上将它们用于变量范围。此外,任何散列冲突都会产生一个元素列表,这对于多层数据来说可能是很好的。
除此之外,您可能想要使用精灵。但我认为你应该先搞定基础,然后再实现精灵——抱歉冒昧,这是我的实现方法。
编辑:
根据您的评论和您当前的经验,我想提出最后的建议......不要使用 ocamlSDL。对于您所做的事情没有任何理由,尤其是刚刚学习语言的人-这是我收集到的,如果我错了,请纠正我。我的建议是使用内置于 ocaml 中的独立于机器的图形模块!它具有完成这个简单游戏所需的所有功能。该模块非常简单,您应该能够直接进行设置。
与 nlucaroni 大肆暗示的相反,ocamlsdl 的文档实际上非常好。
ocamldoc 生成的文档甚至对大多数功能都有描述,您很可能不必查看 SDL 的 C 文档。
我提到的页面也有在 Windows 上编译的说明,尽管我从未尝试过遵循它们。
例如这里是模块draw的接口,我们可以在屏幕上绘制像素:
val draw_player: int -> int -> unit
val draw_missile: int -> int -> unit
val draw_text_center: int -> int -> string -> unit
键入运动场
val empty_playfield: int -> int -> playfield
类型像素 = 背景 | 污垢 | 岩石
val set_playfield_pixel:playfield -> int -> int -> pixel -> unit
val draw_playfield: 运动场 -> 单位
val 更新:单位 -> 单位
这些是我们用来设计游戏的功能!!!好可怜哈!无论如何,要在 Windows 中使用该模块(它本身使用 ocamlsdl)我应该先编译它,我的问题是,绘制一个每像素 800x600 像素的屏幕是个好主意吗?并表示该屏幕,例如说像素(xy)表示背景或游戏的另一部分,什么是最好的表示?800x600的数组,我对此感到不舒服,表演和......你知道的!