5

我正在尝试在 Haskell 中制作一个飞扬的小鸟游戏,我想知道是否有办法将 .bmp 文件“编译”成二进制文件?所以我只能共享可执行文件,不需要包含精灵的文件夹。

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

bg0Pic = unsafePerformIO . loadBMP $ "bg0.bmp"

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

可以在GitHub 上找到整个代码

4

2 回答 2

4

您可以使用 file-embed 包,它使用 Template 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)
于 2019-03-06T16:38:11.337 回答
3

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

这个想法是您添加要与应用程序捆绑并在运行时在Data-Files.cabal 文件的标题下访问的所有数据文件(文本、图像、精灵、其他二进制文件)。

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

更多信息可以在这里找到!

于 2019-03-06T15:25:44.733 回答