Я пытаюсь создать ржавчину, требующую рендеринга текста. Способ, который я нашел, это:
let font:&Font = &ttf_context.load_font(FONT_PATH, 128)?;
Моя проблема в том, что для этого требуется, чтобы встроенный двоичный файл имел файл шрифта. Я хочу, чтобы двоичный файл содержал файл шрифта внутри себя.
Я кратко попытался использовать include_bytes!()
и include_dir!()
, но мне не удалось заставить их работать с &ttf_context.load_font()
, который ожидает &str пути, который просто возвращает меня к исходной проблеме, и я получаю сообщение об ошибке "Couldn't open ./assets/Font.ttf"
Есть ли способ включить файл шрифта таким образом, чтобы я все еще мог получить его путь, или есть другой способ отображения текста?
Редактировать 1: Могу ли я объединить папку двоичных файлов и ресурсов в один файл, например файл .app
для macOS или .exe
для Windows?
На что я надеялся, так это на возможность запуска программы без необходимости в папке с ресурсами в том же каталоге. Есть ли другой способ сделать это, например, файл .app
в macOS?
Невозможно получить путь к включенному файлу, так как этот файл не обязательно существует во время выполнения, и вы можете использовать load_font
только с файлами, которые действительно существуют в файловой системе.
Вместо этого вы можете использовать Sdl2TtfContext::load_font_from_rwops
с байтами include
d следующим образом:
use sdl2::rwops::RWops;
let font: &[u8] = include_bytes!("./assets/Font.ttf");
let font: &Font = &ttf_context
.load_font_from_rwops(RWops::from_bytes(font)?, 128)?;
Крайне необычно встраивать все свои игровые активы в двоичный файл. Существует ли
Font.ttf
на самом деле, и это просто проблема с поиском папкиassets
во время выполнения?