Включить спрайты в бинарную библиотеку Gloss

Я пытаюсь создать игру про птичек на Haskell, и я хотел бы знать, есть ли способ «скомпилировать» файлы .bmp в двоичный файл? Так что я могу поделиться только исполняемым файлом и мне не нужна папка со спрайтами.

Я использую gloss-1.13.0.1 и загружаю bmp как

bg0Pic = unsafePerformIO . loadBMP $ "bg0.bmp"

Я знаю, что unsafePerformIO не очень хорошая практика, но меня это пока не касается. Должен ли я использовать другой подход, чтобы компилятор знал, что мне нужно это изображение, или просто нет способа сделать это?

Весь код можно найти на GitHub.


person Lorenzo    schedule 06.03.2019    source источник


Ответы (2)


Вы можете использовать пакет file-embed, который использует Template Haskell для встраивания файлов.

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

person Michael Snoyman    schedule 06.03.2019
comment
Я не могу понять, как его использовать, и документация не самая лучшая. Не могли бы вы просто привести пример того, как мне нужно проверить мой код, чтобы получить bmp - person Lorenzo; 07.03.2019
comment
Хорошо, похоже, мне нужно преобразовать выражение Q в ByteString, а затем я могу использовать bitmapOfByteString - person Lorenzo; 07.03.2019
comment
Вы используете что-то вроде $(embedFile "file.bmp"). Вам нужно включить прагму TemplateHaskell. - person Michael Snoyman; 07.03.2019

Один из подходов заключается в использовании файлов данных с кликой.

Идея состоит в том, что вы добавляете все файлы данных (текст, изображения, спрайты, другие двоичные файлы), которые вы хотите связать с вашим приложением и получить к ним доступ во время выполнения, под заголовком Data-Files в вашем файле .cabal.

Это заставит cabal сгенерировать для вас модуль Paths, к которому вы сможете получить доступ в любом модуле, который в нем нуждается.

Дополнительную информацию можно найти здесь!

person sara    schedule 06.03.2019
comment
Вроде как это только связывает файл с бинарником, но его еще надо установить с кабалой. Я ищу способ встроить его в двоичный файл, чтобы он был независимым - person Lorenzo; 07.03.2019