将精灵包含到二进制文件中——Gloss 库

Include sprites into binary -- Gloss library

我正在尝试在 Haskell 中制作一个 flappy bird 游戏,我想知道是否有办法将 .bmp 文件 "compile" 转换为二进制文件?所以我只能共享可执行文件,不需要带有精灵的文件夹。

我正在使用 gloss-1.13.0.1 并将 bmp 加载为

bg0Pic = unsafePerformIO . loadBMP $ "bg0.bmp"

我知道 unsafePerformIO 不是好的做法,但这不是我关心的问题。我应该使用不同的方法让编译器知道我需要那个图像还是没有办法做到这一点?

可以在GitHub

上找到完整代码

一种方法是将数据文件与 cabal 一起使用。

我们的想法是,您将要与应用程序捆绑在一起的所有数据文件(文本、图像、精灵、其他二进制文件)添加到您的 .阴谋集团文件。

这将使 cabal 为您生成一个 Paths 模块,您可以在任何需要它的模块中访问它。

可以找到更多信息 here!

您可以使用文件嵌入包,它使用模板 Haskell 来嵌入文件。

https://www.stackage.org/package/file-embed

例如:

sprites :: ByteString
sprites = $(embedFile "images/sprites.png")

wordsPic :: Picture
wordsPic = fromMaybe mempty
  (either (\_ -> Nothing) Just (decodeImage sprites)
    >>= fromDynamicImage)