问题标签 [haskell-sdl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
140 浏览

haskell - Haskell + SDL,不了解函数/状态用法

首先请注意,我不确定如何命名这个问题,因为我不知道到底是什么问题。

我一直在玩 Haskell+SDL 并且被卡住了。我的 GitHub 存储库在这里:https ://github.com/kennycason/haskell_boxxle/

在第 209 行有一行代码:

quit <- whileEvents $ modifyPlayerPos . handleKeyboard

它只能移动播放器,但我真的希望能够修改存储的其他内容GameData,即存储在Room(即boxes = [Coord])中的数据

我通过以下方式开始循环:

但是在我进入循环之后,我真的不知道如何gData再次获得访问权限,或者即使我知道了,如何编写modify函数,就像我为 GameData (modifyPlayerPos等) 中的其他值所做的那样。

我复制并修改handleKeyboardhandleKeyboard2以演示我想要传递给 handleKeyboard 的类型。

我还是 Monads 和 Haskell 的新手,所以我很感激任何建议。如果我的问题不够清楚,请告诉我。谢谢!

0 投票
1 回答
1122 浏览

haskell - 如何在 Haskell 中将 SVG 光栅化为 SDL.Surface?

我正在使用sdl2@2.2.0sdl2-image@2.0.0。我想绘制 SVG 图像,但 sdl2-image 不支持这种格式(请参阅https://www.libsdl.org/projects/SDL_image/):

SDL_image 是一个图像文件加载库。
它将图像加载为 SDL 表面和纹理,并支持以下格式:BMP、GIF、JPEG、LBM、PCX、PNG、PNM、TGA、TIFF、WEBP、XCF、XPM、XV

如何加载 SVG、缩放/调整大小并将其栅格化为 aSDL.SurfaceSDL.Texture

编辑:

在 C++ 中,您可以使用nanosvg库:

您必须对static_cast<void *>传递给的图像数据执行 a SDL_CreateRGBSurfaceFrom。Haskell SDL.createRGBSurfaceFrom(sdl2 版本 2.2.0)期望Data.Vector.Storable.Mutable.VectorIO Word8作为图像数据。

我找到了一个有前途的图书馆rasterific-svg

此包可以将 SVG 渲染为图像或将其转换为 PDF。

drawingOfSvgDocument您可以使用或进行渲染renderSvgDocument。但是,我不知道如何将任一结果转换为Data.Vector.Storable.Mutable.VectorIO Word8.

编辑2:

我现在有一个正在运行的例子。但是,渲染结果还不正确。

这个SVG

SVG 图像

呈现为

渲染结果

0 投票
1 回答
31 浏览

haskell - 如何从 Haskell 的 SDL 绑定中的 RenderConfig 中提取值

这可能是初学者的错误,因为这是我第一次“真正”尝试使用 Haskell。

我的相关代码片段如下所示:

值得注意的是, ghc 并没有抱怨 的导入RendererConfig,这让我觉得我用错了。

看起来它的来源RendererConfig只有两个参数,所以我不确定为什么匹配在 case 表达式中不起作用。

编辑

我得到的错误信息: