Задать вопрос
@KD_DagAI

Как правильно указать путь к пнг файлу в SFML при работе с Cmake?

D:\SFML_Test_project\src\sprites - это директория пнг файла который мне нужно загрузить
sf::Texture texture("sprites/mainHeroTest.png", true); - тут тестовая текстура которую я попытался загрузить

мне выдает ошибку hat(): Failed to load texture from memory, как я понимаю файл найти не получилось
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Обычно ошибка о том, что файл не найден звучит как "File not found" ну или что-то типа того.
Какая реализация обработки ошибок в SFML я не в курсе, может там одно сообщение на все ошибки.

Сейчас в качестве костыля просто укажите полный путь к папке для исключения варианта ошибки с не найденным файлом.

Но для нормальной программы, которая должна установиться в систему и нормально после этого работать, надо этот вопрос решить кардинально. Сейчас вы указываете относительный путь. Относительный он относительно каталога src. Но программа ваша стартует наверняка не из каталога src, а где-то из src/../build например или вообще из произвольного каталога. Поэтому найти файл по такому относительному пути она в принципе не может. При указании относительного пути обычно предполагается наличие подкаталога sprites в текущем каталоге. Но текущий каталог - это почти наверняка не каталог src и это может быть даже не каталог в котором реально лежит исполняемый файл программы.

Для начала надо определиться для себя где будет лежать каталог sprites во время работы программы. Тут вариантов несколько, в т.ч. и зависимые от ОС:
1. в текущем каталоге - вариант плохой, т.к., как писал выше, при запуске программы текущий каталог может быть произвольным в файловой системе и от вас в общем случае это не зависит.
2. в каталоге где лежит исполняемый файл. То же не очень. Для винды в принципе подходит, для линукса нет, т.к. там все бинарники обычно лежат в своих директориях (/usr/bin, ...), а сопутствующие файлы где-то в другом месте (см.ниже).
3. В каталоге программы размещенном в профиле пользователя или в общем профиле - этот вариант обычно и используют. Для винды это может быть подкаталог вашей программы в каталоге определенном в переменной окружения %APPDATA% или в %ALLUSERSAPPDATA%. Для линукса есть аналогичные каталоги см. документ Filesystem Hierarchy Standard.
4. В каталоге указанном в параметрах командной строки при запуске программы (в конфигурационном файле, в реестре, где-то еще). Но при этом надо будет подумать, где хранить собственно сам файл с настройками. Самый простой в реализации способ - указать в параметрах командной строки.

Потом в коде программы вы на основании этого соглашения с самим собой строите абсолютный путь к каталогу sprites и загружаете файлы по абсолютному пути.
Ответ написан
Комментировать
@Skirikikaka
Смени слеши с обратных на прямые в пути D:\SFML_Test_project\src\sprites
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы